我正在尝试将一些旧版OpenGL代码转换为现代OpenGL。该代码正在从纹理中读取数据并显示出来。目前使用ARB_fragment_program
命令创建片段着色器:
static const char *gl_shader_code =
"!!ARBfp1.0\n"
"TEX result.color, fragment.texcoord, texture[0], RECT; \n"
"END";
GLuint program_id;
glGenProgramsARB(1, &program_id);
glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, program_id);
glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, (GLsizei) strlen(gl_shader_code ), (GLubyte *) gl_shader_code );
我希望你能将这段话翻译成GLSL代码。我认为片元着色器应该长这样:
#version 430 core
uniform sampler2DRect s;
void main(void)
{
gl_FragColor = texture2DRect(s, ivec2(gl_FragCoord.xy), 0);
}
但是我不确定其中一些细节:
texture2DRect
的使用方法是否正确?gl_FragCoord
的使用方法是否正确?
该纹理使用GL_PIXEL_UNPACK_BUFFER
目标的像素缓冲对象进行提供。
texture2D
函数已被弃用,您应该使用texture
函数代替(具有相同的签名)。 - cmourglia