gpt4 book ai didi

opengl - 将 ARB 程序集翻译成 GLSL?

转载 作者:行者123 更新时间:2023-12-04 18:33:52 24 4
gpt4 key购买 nike

我正在尝试将一些旧的 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);
}

但我不确定几个细节:

  1. 这是 texture2DRect 的正确用法吗?
  2. 这是 gl_FragCoord 的正确用法吗?

使用 GL_PIXEL_UNPACK_BUFFER 目标为纹理提供像素缓冲区对象。

最佳答案

  1. 我认为你可以只使用标准的 sampler2D 而不是 sampler2DRect (如果你真的不需要它)因为,引用 the wiki , “从现代的角度来看,它们(矩形纹理)似乎基本上没有用。”。

然后您可以将 texture2DRect(...) 更改为 texture(...)texelFetch(...) (模仿您的矩形提取)。

  1. 由于您似乎正在使用 OpenGL 4,因此您不需要(不应该?)使用 gl_FragColor 而是声明一个 out 变量并写入它。

你的片段着色器最终应该看起来像这样:

#version 430 core
uniform sampler2D s;
out vec4 out_color;

void main(void)
{
out_color = texelFecth(s, vec2i(gl_FragCoord.xy), 0);
}

关于opengl - 将 ARB 程序集翻译成 GLSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42724440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com