【发布时间】:2017-08-01 03:44:12
【问题描述】:
我正在尝试将一些旧的 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 目标为纹理提供像素缓冲区对象。
【问题讨论】: