📄 arbprogram.c
字号:
_mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribfvARB(pname)"); return; }}void GLAPIENTRY_mesa_GetVertexAttribivARB(GLuint index, GLenum pname, GLint *params){ GLfloat fparams[4]; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); _mesa_GetVertexAttribfvARB(index, pname, fparams); if (ctx->ErrorValue == GL_NO_ERROR) { if (pname == GL_CURRENT_VERTEX_ATTRIB_ARB) { COPY_4V_CAST(params, fparams, GLint); /* float to int */ } else { params[0] = (GLint) fparams[0]; } }}void GLAPIENTRY_mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer){ GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (index >= ctx->Const.VertexProgram.MaxAttribs) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetVertexAttribPointerARB(index)"); return; } if (pname != GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetVertexAttribPointerARB(pname)"); return; } *pointer = (GLvoid *) ctx->Array.ArrayObj->VertexAttrib[index].Ptr;}/** * Determine if id names a vertex or fragment program. * \note Not compiled into display lists. * \note Called from both glIsProgramNV and glIsProgramARB. * \param id is the program identifier * \return GL_TRUE if id is a program, else GL_FALSE. */GLboolean GLAPIENTRY_mesa_IsProgramARB(GLuint id){ struct gl_program *prog = NULL; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); if (id == 0) return GL_FALSE; prog = _mesa_lookup_program(ctx, id); if (prog && (prog != &_mesa_DummyProgram)) return GL_TRUE; else return GL_FALSE;}void GLAPIENTRY_mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string){ GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (format != GL_PROGRAM_FORMAT_ASCII_ARB) { _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(format)"); return; } if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { struct gl_vertex_program *prog = ctx->VertexProgram.Current; _mesa_parse_arb_vertex_program(ctx, target, string, len, prog); if (ctx->Program.ErrorPos == -1 && ctx->Driver.ProgramStringNotify) ctx->Driver.ProgramStringNotify( ctx, target, &prog->Base ); } else if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { struct gl_fragment_program *prog = ctx->FragmentProgram.Current; _mesa_parse_arb_fragment_program(ctx, target, string, len, prog); if (ctx->Program.ErrorPos == -1 && ctx->Driver.ProgramStringNotify) ctx->Driver.ProgramStringNotify( ctx, target, &prog->Base ); } else { _mesa_error(ctx, GL_INVALID_ENUM, "glProgramStringARB(target)"); return; }}/** * Set a program env parameter register. * \note Called from the GL API dispatcher. * Note, this function is also used by the GL_NV_vertex_program extension * (alias to ProgramParameterdNV) */void GLAPIENTRY_mesa_ProgramEnvParameter4dARB(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w){ _mesa_ProgramEnvParameter4fARB(target, index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);}/** * Set a program env parameter register. * \note Called from the GL API dispatcher. * Note, this function is also used by the GL_NV_vertex_program extension * (alias to ProgramParameterdvNV) */void GLAPIENTRY_mesa_ProgramEnvParameter4dvARB(GLenum target, GLuint index, const GLdouble *params){ _mesa_ProgramEnvParameter4fARB(target, index, (GLfloat) params[0], (GLfloat) params[1], (GLfloat) params[2], (GLfloat) params[3]);}/** * Set a program env parameter register. * \note Called from the GL API dispatcher. * Note, this function is also used by the GL_NV_vertex_program extension * (alias to ProgramParameterfNV) */void GLAPIENTRY_mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { if (index >= ctx->Const.FragmentProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameter(index)"); return; } ASSIGN_4V(ctx->FragmentProgram.Parameters[index], x, y, z, w); } else if (target == GL_VERTEX_PROGRAM_ARB /* == GL_VERTEX_PROGRAM_NV */ && (ctx->Extensions.ARB_vertex_program || ctx->Extensions.NV_vertex_program)) { if (index >= ctx->Const.VertexProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameter(index)"); return; } ASSIGN_4V(ctx->VertexProgram.Parameters[index], x, y, z, w); } else { _mesa_error(ctx, GL_INVALID_ENUM, "glProgramEnvParameter(target)"); return; }}/** * Set a program env parameter register. * \note Called from the GL API dispatcher. * Note, this function is also used by the GL_NV_vertex_program extension * (alias to ProgramParameterfvNV) */void GLAPIENTRY_mesa_ProgramEnvParameter4fvARB(GLenum target, GLuint index, const GLfloat *params){ _mesa_ProgramEnvParameter4fARB(target, index, params[0], params[1], params[2], params[3]);}void GLAPIENTRY_mesa_ProgramEnvParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params){ GET_CURRENT_CONTEXT(ctx); GLint i; GLfloat * dest; ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (count <= 0) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameters4fv(count)"); } if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { if ((index + count) > ctx->Const.FragmentProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameters4fv(index + count)"); return; } dest = ctx->FragmentProgram.Parameters[index]; } else if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { if ((index + count) > ctx->Const.VertexProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramEnvParameters4fv(index + count)"); return; } dest = ctx->VertexProgram.Parameters[index]; } else { _mesa_error(ctx, GL_INVALID_ENUM, "glProgramEnvParameters4fv(target)"); return; } for ( i = 0 ; i < count ; i++ ) { COPY_4V(dest, params); params += 4; dest += 4; }}void GLAPIENTRY_mesa_GetProgramEnvParameterdvARB(GLenum target, GLuint index, GLdouble *params){ GET_CURRENT_CONTEXT(ctx); GLfloat fparams[4]; _mesa_GetProgramEnvParameterfvARB(target, index, fparams); if (ctx->ErrorValue == GL_NO_ERROR) { params[0] = fparams[0]; params[1] = fparams[1]; params[2] = fparams[2]; params[3] = fparams[3]; }}void GLAPIENTRY_mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, GLfloat *params){ GET_CURRENT_CONTEXT(ctx); FLUSH_VERTICES(ctx, _NEW_PROGRAM); if (!ctx->_CurrentProgram) ASSERT_OUTSIDE_BEGIN_END(ctx); if (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program) { if (index >= ctx->Const.FragmentProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramEnvParameter(index)"); return; } COPY_4V(params, ctx->FragmentProgram.Parameters[index]); } else if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { if (index >= ctx->Const.VertexProgram.MaxEnvParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glGetProgramEnvParameter(index)"); return; } COPY_4V(params, ctx->VertexProgram.Parameters[index]); } else { _mesa_error(ctx, GL_INVALID_ENUM, "glGetProgramEnvParameter(target)"); return; }}/** * Note, this function is also used by the GL_NV_fragment_program extension. */void GLAPIENTRY_mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w){ GET_CURRENT_CONTEXT(ctx); struct gl_program *prog; ASSERT_OUTSIDE_BEGIN_END(ctx); FLUSH_VERTICES(ctx, _NEW_PROGRAM); if ((target == GL_FRAGMENT_PROGRAM_NV && ctx->Extensions.NV_fragment_program) || (target == GL_FRAGMENT_PROGRAM_ARB && ctx->Extensions.ARB_fragment_program)) { if (index >= ctx->Const.FragmentProgram.MaxLocalParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameterARB"); return; } prog = &(ctx->FragmentProgram.Current->Base); } else if (target == GL_VERTEX_PROGRAM_ARB && ctx->Extensions.ARB_vertex_program) { if (index >= ctx->Const.VertexProgram.MaxLocalParams) { _mesa_error(ctx, GL_INVALID_VALUE, "glProgramLocalParameterARB"); return; } prog = &(ctx->VertexProgram.Current->Base); } else { _mesa_error(ctx, GL_INVALID_ENUM, "glProgramLocalParameterARB"); return; } ASSERT(index < MAX_PROGRAM_LOCAL_PARAMS); prog->LocalParams[index][0] = x; prog->LocalParams[index][1] = y; prog->LocalParams[index][2] = z; prog->LocalParams[index][3] = w;}/** * Note, this function is also used by the GL_NV_fragment_program extension. */void GLAPIENTRY_mesa_ProgramLocalParameter4fvARB(GLenum target, GLuint index, const GLfloat *params){ _mesa_ProgramLocalParameter4fARB(target, index, params[0], params[1], params[2], params[3]);}void GLAPIENTRY_mesa_ProgramLocalParameters4fvEXT(GLenum target, GLuint index, GLsizei count, const GLfloat *params)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -