From 6b26ebd99b1e872c534f58d39be4e75ef69f29bf Mon Sep 17 00:00:00 2001 From: Rodrigo Braz Monteiro Date: Sun, 1 Apr 2007 23:27:22 +0000 Subject: [PATCH] Made video context respect the setting of "video use pixel shaders", which was being ignored by ffmpeg, since it can only output yv12. Originally committed to SVN as r975. --- aegisub/gl_wrap.cpp | 11 +++++++++++ aegisub/video_context.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/aegisub/gl_wrap.cpp b/aegisub/gl_wrap.cpp index d230acc25..fbd85d979 100644 --- a/aegisub/gl_wrap.cpp +++ b/aegisub/gl_wrap.cpp @@ -293,6 +293,7 @@ void OpenGLWrapper::Initialize() { initialized = true; glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) glGetProc("glUseProgramObjectARB"); + if (!glUseProgramObjectARB) throw _T("OpenGL shader support not available."); glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) glGetProc("glDeleteObjectARB"); glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) glGetProc("glCreateProgramObjectARB"); glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) glGetProc("glAttachObjectARB"); @@ -330,13 +331,17 @@ GLuint OpenGLWrapper::CreateShaderProgram(GLuint vertex,GLuint pixel) { // Create instance Initialize(); GLuint program = glCreateProgramObjectARB(); + if (glGetError()) throw _T("Error creating shader program."); // Attach shaders glAttachObjectARB(program,vertex); + if (glGetError()) throw _T("Error attaching vertex shader to shader program."); glAttachObjectARB(program,pixel); + if (glGetError()) throw _T("Error attaching pixel shader to shader program."); // Link glLinkProgramARB(program); + if (glGetError()) throw _T("Error attaching linking shader program."); // Return return program; @@ -349,6 +354,7 @@ GLuint OpenGLWrapper::CreateStandardVertexShader() { // Create instance Initialize(); GLuint shader = glCreateShaderObjectARB(GL_VERTEX_SHADER); + if (glGetError()) throw _T("Error generating vertex shader."); // Read source char source[] = @@ -360,7 +366,9 @@ GLuint OpenGLWrapper::CreateStandardVertexShader() { // Compile const GLchar *src = source; glShaderSourceARB(shader,1,&src,NULL); + if (glGetError()) throw _T("Error acquiring source for vertex shader."); glCompileShaderARB(shader); + if (glGetError()) throw _T("Error compiling vertex shader."); // Return return shader; @@ -373,6 +381,7 @@ GLuint OpenGLWrapper::CreateYV12PixelShader() { // Create instance Initialize(); GLuint shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER); + if (glGetError()) throw _T("Error generating pixel shader."); // Read source char source[] = @@ -399,7 +408,9 @@ GLuint OpenGLWrapper::CreateYV12PixelShader() { // Compile const GLchar *src = source; glShaderSourceARB(shader,1,&src,NULL); + if (glGetError()) throw _T("Error acquiring source for vertex shader."); glCompileShaderARB(shader); + if (glGetError()) throw _T("Error compiling vertex shader."); // Return return shader; diff --git a/aegisub/video_context.cpp b/aegisub/video_context.cpp index ad5e7ca59..f25073fc5 100644 --- a/aegisub/video_context.cpp +++ b/aegisub/video_context.cpp @@ -480,7 +480,7 @@ GLuint VideoContext::GetFrameAsTexture(int n) { glPrioritizeTextures(1,&lastTex,&priority); // Create shader if necessary - if (frame.format == FORMAT_YV12 && yv12shader == 0) { + if (frame.format == FORMAT_YV12 && yv12shader == 0 && OpenGLWrapper::UseShaders()) { yv12shader = OpenGLWrapper::CreateYV12Shader(texW,texH,float(frame.pitch[1])/float(tw)); } }