Những gì bạn cần là đặt kết cấu vào một vị trí cụ thể, sau đó sử dụng một mẫu để đọc từ nó. Trong ứng dụng của bạn:
GLuint frameBuffer;
glGenFramebuffersEXT(1, &frameBuffer); //Create a frame buffer
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBuffer); //Bind it so we draw to it
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, yourTexture, 0); //Attach yourTexture so drawing goes into it
//Draw here and it'll go into yourTexture.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); //Unbind the framebuffer so that you can draw normally again
//Here we put the texture in slot 1.
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, yourTexture);
glActiveTexture(GL_TEXTURE0); //Don't forget to go back to GL_TEXTURE0 if you're going to do more drawing later
//Now we tell your shader where to look.
GLint var = glGetUniformLocationARB(yourShaderProgram, "yourSampler");
glUniform1i(var, 1); //We use 1 here because we used GL_TEXTURE1 to bind our texture
Và trong shader mảnh của bạn:
uniform sampler2D yourSampler;
void main()
{
gl_FragColor = texture2D(yourSampler, whateverCoordinatesYouWant);
}
Bạn có thể sử dụng điều này với GL_TEXTURE2
và vân vân để truy cập thậm chí nhiều hơn kết cấu trong shader của bạn.
và hơn nữa tôi sẽ phải chọn bộ rút gọn, phải không? do đó có một cái gì đó như: glDrawBuffer (GL_COLOR_ATTACHMENT0_EXT); \t glActiveTexture (GL_TEXTURE1); \t glBindTexture (GL_TEXTURE_2D, yourTexture); // vẽ GLint var = glGetUniformLocationARB (yourShaderProgram, "yourSampler"); glUniform1i (var, 1); // Chúng tôi sử dụng 1 ở đây vì chúng tôi sử dụng GL_TEXTURE1 để liên kết kết cấu của chúng tôi – Donny
@Donny Bạn đang trộn hai thứ hoàn toàn khác nhau (cụ thể là hiển thị với bộ đệm khung và đọc từ kết cấu được hiển thị trước đó). –
Những gì tôi đang cố gắng làm là hiển thị cho bộ đệm khung, lấy kết quả đó trong trình đổ bóng. Ý tưởng là cách này tôi có thể có nhiều kết cấu khác nhau tất cả các generatad bằng cách rendering vào framebuffer. Kết quả là tôi muốn kết hợp tất cả các kết cấu này. Điều này có khả thi không? – Donny