Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 采样器1D映射空白,无错误_C++_Opengl_Textures_Fragment Shader - Fatal编程技术网

C++ 采样器1D映射空白,无错误

C++ 采样器1D映射空白,无错误,c++,opengl,textures,fragment-shader,C++,Opengl,Textures,Fragment Shader,我最终希望基于3个1d采样器对图像进行着色。我写了这个快速程序来测试我是否可以将纹理的红色通道映射到它自己,这就是所谓的线性映射 现在代码显示一个空白屏幕,尽管我在程序、着色器和常规执行中检查了所有错误。当我不执行贴图时,纹理会按预期进行渲染 我在GeForce Ti 550上,目标是Windows 该方法的灵感主要来自: 制作纹理和取样器 glActiveTexture(GL_TEXTURE1); glGenTextures(1,lut); glBindTexture(GL_TEXTURE_1

我最终希望基于3个1d采样器对图像进行着色。我写了这个快速程序来测试我是否可以将纹理的红色通道映射到它自己,这就是所谓的线性映射

现在代码显示一个空白屏幕,尽管我在程序、着色器和常规执行中检查了所有错误。当我不执行贴图时,纹理会按预期进行渲染

我在GeForce Ti 550上,目标是Windows

该方法的灵感主要来自:

制作纹理和取样器

glActiveTexture(GL_TEXTURE1);
glGenTextures(1,lut);
glBindTexture(GL_TEXTURE_1D,lut[0]);
unsigned char* linear = new unsigned char[256];//should be a 1->1 mapping
for (int i = 0 ;i < 256;i++)
{
    linear[i] = i;
}
glTexImage1D(GL_TEXTURE_1D, 0, GL_R8, 256, 0,GL_RED, GL_UNSIGNED_BYTE, linear);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAX_LEVEL, 0);
glBindTexture(GL_TEXTURE_1D, 0);
delete linear;
glGenSamplers(1,sampler);
glSamplerParameteri(sampler[0], GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glSamplerParameteri(sampler[0], GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glSamplerParameteri(sampler[0], GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);   
glE();// no errors
渲染功能

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glE();
//Bind
glUseProgram(programHandle);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,textures[frame]);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_1D,lut[0]);
GLuint idk = glGetUniformLocation(programHandle, "tex1");
glUniform1i(idk,0);
glBindSampler(0,sampler[0]);glE();
glE();
//Draw
glBindVertexArray(vaoHandle);
glDrawArrays(GL_TRIANGLES,0,8);
glBindVertexArray(0);
glE();
//Unbind
glActiveTexture(GL_TEXTURE1);
glBindSampler(0,0);
glBindTexture(GL_TEXTURE_1D,0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,0);
glUseProgram(0);
glE();
//DumpFrame
glFlush();
glFinish();
glE();
你正在设置

glUniform1i(idk,0);

因此,您告诉GL使用纹理单元0对“tex1”1D纹理进行采样,这是无效的,因为您在那里绑定了2D纹理。

您的
#版本
指令在哪里?感谢您的帮助,我花了大约6个小时研究这一深奥的东西。
glUniform1i(idk,0);