📄 shaderobjects.c
字号:
GLvoid GLAPIENTRY_mesa_Uniform4fvARB (GLint location, GLsizei count, const GLfloat *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniform4fvARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (!_slang_write_uniform (pro, location, count, value, GL_FLOAT_VEC4)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4fvARB"); }}GLvoid GLAPIENTRY_mesa_Uniform1ivARB (GLint location, GLsizei count, const GLint *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniform1ivARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (!_slang_write_uniform (pro, location, count, value, GL_INT)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform1ivARB"); }}GLvoid GLAPIENTRY_mesa_Uniform2ivARB (GLint location, GLsizei count, const GLint *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniform2ivARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (!_slang_write_uniform (pro, location, count, value, GL_INT_VEC2)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform2ivARB"); }}GLvoid GLAPIENTRY_mesa_Uniform3ivARB (GLint location, GLsizei count, const GLint *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniform3ivARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (!_slang_write_uniform (pro, location, count, value, GL_INT_VEC3)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform3ivARB"); }}GLvoid GLAPIENTRY_mesa_Uniform4ivARB (GLint location, GLsizei count, const GLint *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniform4ivARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (!_slang_write_uniform (pro, location, count, value, GL_INT_VEC4)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniform4ivARB"); }}GLvoid GLAPIENTRY_mesa_UniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniformMatrix2fvARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (transpose) { GLfloat *trans, *pt; const GLfloat *pv; trans = (GLfloat *) _mesa_malloc (count * 4 * sizeof (GLfloat)); if (trans == NULL) { _mesa_error (ctx, GL_OUT_OF_MEMORY, "glUniformMatrix2fvARB"); return; } for (pt = trans, pv = value; pt != trans + count * 4; pt += 4, pv += 4) { pt[0] = pv[0]; pt[1] = pv[2]; pt[2] = pv[1]; pt[3] = pv[3]; } if (!_slang_write_uniform (pro, location, count, trans, GL_FLOAT_MAT2)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix2fvARB"); _mesa_free (trans); } else { if (!_slang_write_uniform (pro, location, count, value, GL_FLOAT_MAT2)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix2fvARB"); } }}GLvoid GLAPIENTRY_mesa_UniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniformMatrix3fvARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (transpose) { GLfloat *trans, *pt; const GLfloat *pv; trans = (GLfloat *) _mesa_malloc (count * 9 * sizeof (GLfloat)); if (trans == NULL) { _mesa_error (ctx, GL_OUT_OF_MEMORY, "glUniformMatrix3fvARB"); return; } for (pt = trans, pv = value; pt != trans + count * 9; pt += 9, pv += 9) { pt[0] = pv[0]; pt[1] = pv[3]; pt[2] = pv[6]; pt[3] = pv[1]; pt[4] = pv[4]; pt[5] = pv[7]; pt[6] = pv[2]; pt[7] = pv[5]; pt[8] = pv[8]; } if (!_slang_write_uniform (pro, location, count, trans, GL_FLOAT_MAT3)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix3fvARB"); _mesa_free (trans); } else { if (!_slang_write_uniform (pro, location, count, value, GL_FLOAT_MAT3)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix3fvARB"); } }}GLvoid GLAPIENTRY_mesa_UniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value){ GET_CURRENT_CONTEXT(ctx); GET_CURRENT_LINKED_PROGRAM(pro, "glUniformMatrix4fvARB");
FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (pro != NULL) { if (transpose) { GLfloat *trans, *pt; const GLfloat *pv; trans = (GLfloat *) _mesa_malloc (count * 16 * sizeof (GLfloat)); if (trans == NULL) { _mesa_error (ctx, GL_OUT_OF_MEMORY, "glUniformMatrix4fvARB"); return; } for (pt = trans, pv = value; pt != trans + count * 16; pt += 16, pv += 16) { _math_transposef (pt, pv); } if (!_slang_write_uniform (pro, location, count, trans, GL_FLOAT_MAT4)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix4fvARB"); _mesa_free (trans); } else { if (!_slang_write_uniform (pro, location, count, value, GL_FLOAT_MAT4)) _mesa_error (ctx, GL_INVALID_OPERATION, "glUniformMatrix4fvARB"); } }}static GLboolean_mesa_get_object_parameter (GLhandleARB obj, GLenum pname, GLvoid *params, GLboolean *integral, GLint *size){ GET_CURRENT_CONTEXT(ctx); GLint *ipar = (GLint *) params; /* set default values */ *integral = GL_TRUE; /* indicates param type, TRUE: GLint, FALSE: GLfloat */ *size = 1; /* param array size */ switch (pname) { case GL_OBJECT_TYPE_ARB: case GL_OBJECT_DELETE_STATUS_ARB: case GL_OBJECT_INFO_LOG_LENGTH_ARB: { GET_GENERIC(gen, obj, "glGetObjectParameterivARB"); if (gen == NULL) return GL_FALSE; switch (pname) { case GL_OBJECT_TYPE_ARB: *ipar = (**gen).GetType (gen); break; case GL_OBJECT_DELETE_STATUS_ARB: *ipar = (**gen).GetDeleteStatus (gen); break; case GL_OBJECT_INFO_LOG_LENGTH_ARB: { const GLcharARB *info = (**gen).GetInfoLog (gen); if (info == NULL) *ipar = 0; else *ipar = _mesa_strlen (info) + 1; } break; } RELEASE_GENERIC(gen); } break; case GL_OBJECT_SUBTYPE_ARB: case GL_OBJECT_COMPILE_STATUS_ARB: case GL_OBJECT_SHADER_SOURCE_LENGTH_ARB: { GET_SHADER(sha, obj, "glGetObjectParameterivARB"); if (sha == NULL) return GL_FALSE; switch (pname) { case GL_OBJECT_SUBTYPE_ARB: *ipar = (**sha).GetSubType (sha); break; case GL_OBJECT_COMPILE_STATUS_ARB: *ipar = (**sha).GetCompileStatus (sha); break; case GL_OBJECT_SHADER_SOURCE_LENGTH_ARB: { const GLcharARB *src = (**sha).GetSource (sha); if (src == NULL) *ipar = 0; else *ipar = _mesa_strlen (src) + 1; } break; } RELEASE_SHADER(sha); } break; case GL_OBJECT_LINK_STATUS_ARB: case GL_OBJECT_VALIDATE_STATUS_ARB: case GL_OBJECT_ATTACHED_OBJECTS_ARB: case GL_OBJECT_ACTIVE_UNIFORMS_ARB: case GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB: { GET_PROGRAM(pro, obj, "glGetObjectParameterivARB"); if (pro == NULL) return GL_FALSE; switch (pname) { case GL_OBJECT_LINK_STATUS_ARB: *ipar = (**pro).GetLinkStatus (pro); break; case GL_OBJECT_VALIDATE_STATUS_ARB: *ipar = (**pro).GetValidateStatus (pro); break; case GL_OBJECT_ATTACHED_OBJECTS_ARB: *ipar = (**pro)._container.GetAttachedCount ((I_CONTAINER) pro); break; case GL_OBJECT_ACTIVE_UNIFORMS_ARB: *ipar = _slang_get_active_uniform_count (pro); break; case GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB: *ipar = _slang_get_active_uniform_max_length (pro); break; } RELEASE_PROGRAM(pro); } break; default: _mesa_error (ctx, GL_INVALID_ENUM, "glGetObjectParameterivARB"); return GL_FALSE; } return GL_TRUE;}GLvoid GLAPIENTRY_mesa_GetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params){ GLboolean integral; GLint size; assert (sizeof (GLfloat) == sizeof (GLint)); if (_mesa_get_object_parameter (obj, pname, (GLvoid *) params, &integral, &size)) if (integral) { GLint i; for (i = 0; i < size; i++) params[i] = (GLfloat) ((GLint *) params)[i]; }}GLvoid GLAPIENTRY_mesa_GetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params){ GLboolean integral; GLint size; assert (sizeof (GLfloat) == sizeof (GLint)); if (_mesa_get_object_parameter (obj, pname, (GLvoid *) params, &integral, &size)) if (!integral) { GLint i; for (i = 0; i < size; i++) params[i] = (GLint) ((GLfloat *) params)[i]; }}static GLvoid_mesa_get_string (const GLcharARB *src, GLsizei maxLength, GLsizei *length, GLcharARB *str){ GLsizei len; if (maxLength == 0) { if (length != NULL) *length = 0; return; } if (src == NULL) src = ""; len = _mesa_strlen (src); if (len >= maxLength) len = maxLength - 1; _mesa_memcpy (str, src, len * sizeof (GLcharARB)); str[len] = '\0'; if (length != NULL) *length = len;}GLvoid GLAPIENTRY_mesa_GetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog){ GET_CURRENT_CONTEXT(ctx); GET_GENERIC(gen, obj, "glGetInfoLogARB"); if (gen != NULL) { _mesa_get_string ((**gen).GetInfoLog (gen), maxLength, length, infoLog); RELEASE_GENERIC(gen); }}GLvoid GLAPIENTRY_mesa_GetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj){ GET_CURRENT_CONTEXT(ctx); GLsizei cnt, i; GET_CONTAINER(con, containerObj, "glGetAttachedObjectsARB"); if (con != NULL) { cnt = (**con).GetAttachedCount (con); if (cnt > maxCount) cnt = maxCount; if (count != NULL) *count = cnt; for (i = 0; i < cnt; i++) { I_GENERIC x = (**con).GetAttached (con, i); obj[i] = (**x).GetName (x); RELEASE_GENERIC(x); } RELEASE_CONTAINER(con); }}GLint GLAPIENTRY_mesa_GetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name){ GET_CURRENT_CONTEXT(ctx); GLint loc = -1; GET_LINKED_PROGRAM(pro, programObj, "glGetUniformLocationARB"); if (pro != NULL) { if (name != NULL && (name[0] != 'g' || name[1] != 'l' || name[2] != '_')) loc = _slang_get_uniform_location (pro, name); RELEASE_PROGRAM(pro); } return loc;}GLvoid GLAPIENTRY_mesa_GetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name){ GET_CURRENT_CONTEXT(ctx); GET_PROGRAM(pro, programObj, "glGetActiveUniformARB"); if (pro != NULL) { if (index < _slang_get_active_uniform_count (pro)) _slang_get_active_uniform (pro, index, maxLength, length, size, type, name); else _mesa_error (ctx, GL_INVALID_VALUE, "glGetActiveUniformARB"); RELEASE_PROGRAM(pro); }}GLvoid GLAPIENTRY_mesa_GetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params){ GET_CURRENT_CONTEXT(ctx); GET_LINKED_PROGRAM(pro, programObj, "glGetUniformfvARB"); if (pro != NULL) { /* TODO */ RELEASE_PROGRAM(pro); }}GLvoid GLAPIENTRY_mesa_GetUniformivARB (GLhandleARB programObj, GLint location, GLint *params){ GET_CURRENT_CONTEXT(ctx); GET_LINKED_PROGRAM(pro, programObj, "glGetUniformivARB"); if (pro != NULL) { /* TODO */ RELEASE_PROGRAM(pro); }}GLvoid GLAPIENTRY_mesa_GetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source){ GET_CURRENT_CONTEXT(ctx); GET_SHADER(sha, obj, "glGetShaderSourceARB"); if (sha != NULL) { _mesa_get_string ((**sha).GetSource (sha), maxLength, length, source); RELEASE_SHADER(sha); }}/* GL_ARB_vertex_shader */GLvoid GLAPIENTRY_mesa_BindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name){ GET_CURRENT_CONTEXT(ctx); GET_PROGRAM(pro, programObj, "glBindAttribLocationARB"); if (pro != NULL) { if (name != NULL && (name[0] != 'g' || name[1] != 'l' || name[2] != '_')) { /* TODO */ } RELEASE_PROGRAM(pro); }}GLvoid GLAPIENTRY_mesa_GetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name){ GET_CURRENT_CONTEXT(ctx); GET_PROGRAM(pro, programObj, "glGetActiveAttribARB"); if (pro != NULL) { /* TODO */ RELEASE_PROGRAM(pro); }}GLint GLAPIENTRY_mesa_GetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name){ GET_CURRENT_CONTEXT(ctx); GLint loc = -1; GET_PROGRAM(pro, programObj, "glGetAttribLocationARB"); if (pro != NULL) { if (name != NULL && (name[0] != 'g' || name[1] != 'l' || name[2] != '_')) { /* TODO */ } RELEASE_PROGRAM(pro); } return loc;}GLvoid_mesa_init_shaderobjects (GLcontext *ctx){ ctx->ShaderObjects.CurrentProgram = NULL;
ctx->ShaderObjects._FragmentShaderPresent = GL_FALSE;
ctx->ShaderObjects._VertexShaderPresent = GL_FALSE; _mesa_init_shaderobjects_3dlabs (ctx);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -