ジオメトリ シェーダー内の 3D テクスチャから読み取ろうとしています。
#version 150
layout(points) in; // origo of cell
layout(points, max_vertices = 1) out;
uniform sampler3D text;
void main (void)
{
for(int i = 0; i < gl_in.length(); ++i)
{
// texture coordinates:
float u, v, w;
// set u, v, and w somehow
...
float value = texture(text, vec3(u, v, w)).r;
bool show;
// set show based on value somehow:
...
if(show) {
gl_Position = gl_in[i].gl_Position;
EmitVertex();
EndPrimitive();
}
}
}
これは、初期化 GL コード内でテクスチャを設定する方法です。
int nx = 101;
int ny = 101;
int nz = 101;
float *data = new float[nx*ny*nz];
// set data[] somehow:
...
glEnable(GL_TEXTURE_3D);
glBindTexture(GL_TEXTURE_3D , texture);
glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexImage3D( GL_TEXTURE_3D,
0, // level-of-detail number. 0 is the base image level.
GL_RED, // internal format
nx, ny, nz,
0, // border
GL_RED, // pixel format
GL_FLOAT, // data type of the pixel data
data);
しかし、ジオメトリ シェーダー内のサンプラーの「テキスト」をテクスチャに関連付けるにはどうすればよいでしょうか?
これまでのところ、「テキスト」という名前のサンプラーがあり、テクスチャをサンプリングすることを OpenGL に伝えていません。
編集:私は次のことを試しました:
GLint textLoc = glGetUniformLocation(program, "text");
glUniform1i(textLoc, 0); // sends 0 to "text" in shader
// why do I not just hardcode 0 inside the geometry shader instead ?
glBindTexture(GL_TEXTURE_3D , texture);
glActiveTexture(GL_TEXTURE0); // same as 0 ?
GLuint sampler_state = 0;
glGenSamplers(1, &sampler_state);
glBindSampler(0, sampler_state); // what does this do?
ここで何が問題なのですか?