forked from mia/Aegisub
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.
This commit is contained in:
parent
bef344645b
commit
6b26ebd99b
|
@ -293,6 +293,7 @@ void OpenGLWrapper::Initialize() {
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) glGetProc("glUseProgramObjectARB");
|
glUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) glGetProc("glUseProgramObjectARB");
|
||||||
|
if (!glUseProgramObjectARB) throw _T("OpenGL shader support not available.");
|
||||||
glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) glGetProc("glDeleteObjectARB");
|
glDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) glGetProc("glDeleteObjectARB");
|
||||||
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) glGetProc("glCreateProgramObjectARB");
|
glCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) glGetProc("glCreateProgramObjectARB");
|
||||||
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) glGetProc("glAttachObjectARB");
|
glAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) glGetProc("glAttachObjectARB");
|
||||||
|
@ -330,13 +331,17 @@ GLuint OpenGLWrapper::CreateShaderProgram(GLuint vertex,GLuint pixel) {
|
||||||
// Create instance
|
// Create instance
|
||||||
Initialize();
|
Initialize();
|
||||||
GLuint program = glCreateProgramObjectARB();
|
GLuint program = glCreateProgramObjectARB();
|
||||||
|
if (glGetError()) throw _T("Error creating shader program.");
|
||||||
|
|
||||||
// Attach shaders
|
// Attach shaders
|
||||||
glAttachObjectARB(program,vertex);
|
glAttachObjectARB(program,vertex);
|
||||||
|
if (glGetError()) throw _T("Error attaching vertex shader to shader program.");
|
||||||
glAttachObjectARB(program,pixel);
|
glAttachObjectARB(program,pixel);
|
||||||
|
if (glGetError()) throw _T("Error attaching pixel shader to shader program.");
|
||||||
|
|
||||||
// Link
|
// Link
|
||||||
glLinkProgramARB(program);
|
glLinkProgramARB(program);
|
||||||
|
if (glGetError()) throw _T("Error attaching linking shader program.");
|
||||||
|
|
||||||
// Return
|
// Return
|
||||||
return program;
|
return program;
|
||||||
|
@ -349,6 +354,7 @@ GLuint OpenGLWrapper::CreateStandardVertexShader() {
|
||||||
// Create instance
|
// Create instance
|
||||||
Initialize();
|
Initialize();
|
||||||
GLuint shader = glCreateShaderObjectARB(GL_VERTEX_SHADER);
|
GLuint shader = glCreateShaderObjectARB(GL_VERTEX_SHADER);
|
||||||
|
if (glGetError()) throw _T("Error generating vertex shader.");
|
||||||
|
|
||||||
// Read source
|
// Read source
|
||||||
char source[] =
|
char source[] =
|
||||||
|
@ -360,7 +366,9 @@ GLuint OpenGLWrapper::CreateStandardVertexShader() {
|
||||||
// Compile
|
// Compile
|
||||||
const GLchar *src = source;
|
const GLchar *src = source;
|
||||||
glShaderSourceARB(shader,1,&src,NULL);
|
glShaderSourceARB(shader,1,&src,NULL);
|
||||||
|
if (glGetError()) throw _T("Error acquiring source for vertex shader.");
|
||||||
glCompileShaderARB(shader);
|
glCompileShaderARB(shader);
|
||||||
|
if (glGetError()) throw _T("Error compiling vertex shader.");
|
||||||
|
|
||||||
// Return
|
// Return
|
||||||
return shader;
|
return shader;
|
||||||
|
@ -373,6 +381,7 @@ GLuint OpenGLWrapper::CreateYV12PixelShader() {
|
||||||
// Create instance
|
// Create instance
|
||||||
Initialize();
|
Initialize();
|
||||||
GLuint shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
|
GLuint shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER);
|
||||||
|
if (glGetError()) throw _T("Error generating pixel shader.");
|
||||||
|
|
||||||
// Read source
|
// Read source
|
||||||
char source[] =
|
char source[] =
|
||||||
|
@ -399,7 +408,9 @@ GLuint OpenGLWrapper::CreateYV12PixelShader() {
|
||||||
// Compile
|
// Compile
|
||||||
const GLchar *src = source;
|
const GLchar *src = source;
|
||||||
glShaderSourceARB(shader,1,&src,NULL);
|
glShaderSourceARB(shader,1,&src,NULL);
|
||||||
|
if (glGetError()) throw _T("Error acquiring source for vertex shader.");
|
||||||
glCompileShaderARB(shader);
|
glCompileShaderARB(shader);
|
||||||
|
if (glGetError()) throw _T("Error compiling vertex shader.");
|
||||||
|
|
||||||
// Return
|
// Return
|
||||||
return shader;
|
return shader;
|
||||||
|
|
|
@ -480,7 +480,7 @@ GLuint VideoContext::GetFrameAsTexture(int n) {
|
||||||
glPrioritizeTextures(1,&lastTex,&priority);
|
glPrioritizeTextures(1,&lastTex,&priority);
|
||||||
|
|
||||||
// Create shader if necessary
|
// 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));
|
yv12shader = OpenGLWrapper::CreateYV12Shader(texW,texH,float(frame.pitch[1])/float(tw));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue