Last active
October 30, 2023 03:10
-
-
Save ithmz/1b58f2df84024cf780add1f9fd6f6aaa to your computer and use it in GitHub Desktop.
Upload YUV texture to OpenGL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Get texture location in fragment shader | |
GLint locTexY = glGetUniformLocation(program, "textureY"); | |
GLint locTexVU = glGetUniformLocation(program, "textureVU"); | |
// Upload YUV data to texture buffer | |
GLuint textureID[2]; | |
glGenTextures(1, &textureID[0]); | |
glActiveTexture(GL_TEXTURE0); | |
glBindTexture(GL_TEXTURE_2D, textureID[0]); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, &yuvBuffer[0]); | |
glBindTexture(0); | |
glGenTextures(1, &textureID[1]); | |
glActiveTexture(GL_TEXTURE1); | |
glBindTexture(GL_TEXTURE_2D, textureID[1]); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
glTexImage2D(GL_TEXTURE_2D, 0, GL_RG, width, height/2, 0, GL_RG, GL_UNSIGNED_BYTE, &yuvBuffer[width*height]); | |
glBindTexture(0); | |
glUseProgram(program); | |
glUniform1i(locTexY, 0); // corresponds to GL_TEXTURE0 | |
glUniform1i(locTexVU, 1); // corresponds to GL_TEXTURE1 |
thank you, I have solve the problem.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@xueshenan it depends on what is your input format. If it YUV nv12 then r is u and g is v, nv21 is reversed order