Begin refactoring for non-NV12 support in EGLRenderer

This commit is contained in:
Cameron Gutman 2021-03-21 19:20:52 -05:00
parent e87a5fa354
commit 402b6d1f0c
4 changed files with 24 additions and 14 deletions

View File

@ -27,8 +27,8 @@
<qresource prefix="/data"> <qresource prefix="/data">
<file alias="gamecontrollerdb.txt">SDL_GameControllerDB/gamecontrollerdb.txt</file> <file alias="gamecontrollerdb.txt">SDL_GameControllerDB/gamecontrollerdb.txt</file>
<file alias="ModeSeven.ttf">ModeSeven.ttf</file> <file alias="ModeSeven.ttf">ModeSeven.ttf</file>
<file alias="egl.frag">shaders/egl.frag</file> <file alias="egl_nv12.frag">shaders/egl_nv12.frag</file>
<file alias="egl.vert">shaders/egl.vert</file> <file alias="egl_nv12.vert">shaders/egl_nv12.vert</file>
<file alias="egl_overlay.frag">shaders/egl_overlay.frag</file> <file alias="egl_overlay.frag">shaders/egl_overlay.frag</file>
<file alias="egl_overlay.vert">shaders/egl_overlay.vert</file> <file alias="egl_overlay.vert">shaders/egl_overlay.vert</file>
</qresource> </qresource>

View File

@ -373,18 +373,25 @@ bool EGLRenderer::compileShaders() {
SDL_assert(m_EGLImagePixelFormat != AV_PIX_FMT_NONE); SDL_assert(m_EGLImagePixelFormat != AV_PIX_FMT_NONE);
// XXX: TODO: other formats // XXX: TODO: other formats
SDL_assert(m_EGLImagePixelFormat == AV_PIX_FMT_NV12); if (m_EGLImagePixelFormat == AV_PIX_FMT_NV12) {
m_ShaderProgram = compileShader("egl_nv12.vert", "egl_nv12.frag");
if (!m_ShaderProgram) {
return false;
}
m_ShaderProgram = compileShader("egl.vert", "egl.frag"); m_ShaderProgramParams[PARAM_YUVMAT] = glGetUniformLocation(m_ShaderProgram, "yuvmat");
if (!m_ShaderProgram) { m_ShaderProgramParams[PARAM_OFFSET] = glGetUniformLocation(m_ShaderProgram, "offset");
m_ShaderProgramParams[PARAM_PLANE1] = glGetUniformLocation(m_ShaderProgram, "plane1");
m_ShaderProgramParams[PARAM_PLANE2] = glGetUniformLocation(m_ShaderProgram, "plane2");
}
else {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
"Unsupported EGL pixel format: %d",
m_EGLImagePixelFormat);
SDL_assert(false);
return false; return false;
} }
m_ShaderProgramParams[PARAM_YUVMAT] = glGetUniformLocation(m_ShaderProgram, "yuvmat");
m_ShaderProgramParams[PARAM_OFFSET] = glGetUniformLocation(m_ShaderProgram, "offset");
m_ShaderProgramParams[PARAM_PLANE1] = glGetUniformLocation(m_ShaderProgram, "plane1");
m_ShaderProgramParams[PARAM_PLANE2] = glGetUniformLocation(m_ShaderProgram, "plane2");
m_OverlayShaderProgram = compileShader("egl_overlay.vert", "egl_overlay.frag"); m_OverlayShaderProgram = compileShader("egl_overlay.vert", "egl_overlay.frag");
if (!m_OverlayShaderProgram) { if (!m_OverlayShaderProgram) {
return false; return false;
@ -778,10 +785,13 @@ void EGLRenderer::renderFrame(AVFrame* frame)
glUseProgram(m_ShaderProgram); glUseProgram(m_ShaderProgram);
m_glBindVertexArrayOES(m_VAO); m_glBindVertexArrayOES(m_VAO);
glUniformMatrix3fv(m_ShaderProgramParams[PARAM_YUVMAT], 1, GL_FALSE, getColorMatrix()); // Bind parameters for the NV12 shaders
glUniform3fv(m_ShaderProgramParams[PARAM_OFFSET], 1, getColorOffsets()); if (m_EGLImagePixelFormat == AV_PIX_FMT_NV12) {
glUniform1i(m_ShaderProgramParams[PARAM_PLANE1], 0); glUniformMatrix3fv(m_ShaderProgramParams[PARAM_YUVMAT], 1, GL_FALSE, getColorMatrix());
glUniform1i(m_ShaderProgramParams[PARAM_PLANE2], 1); glUniform3fv(m_ShaderProgramParams[PARAM_OFFSET], 1, getColorOffsets());
glUniform1i(m_ShaderProgramParams[PARAM_PLANE1], 0);
glUniform1i(m_ShaderProgramParams[PARAM_PLANE2], 1);
}
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);