forked from mia/Aegisub
Made a million changes to GL mode, and one of them seems to have fixed video display on ATI cards.
Originally committed to SVN as r879.
This commit is contained in:
parent
563ba5ae76
commit
99e9dce99f
2 changed files with 30 additions and 11 deletions
|
@ -37,6 +37,8 @@
|
|||
////////////
|
||||
// Includes
|
||||
#include "setup.h"
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include <wx/image.h>
|
||||
#include <string.h>
|
||||
#include <wx/clipbrd.h>
|
||||
|
@ -376,7 +378,7 @@ wxGLContext *VideoContext::GetGLContext(wxGLCanvas *canvas) {
|
|||
// Get GL Texture of frame
|
||||
GLuint VideoContext::GetFrameAsTexture(int n) {
|
||||
// Already uploaded
|
||||
if (n == lastFrame) return lastTex;
|
||||
if (n == lastFrame || n == -1) return lastTex;
|
||||
|
||||
// Get frame
|
||||
AegiVideoFrame frame = GetFrame(n);
|
||||
|
@ -414,6 +416,12 @@ GLuint VideoContext::GetFrameAsTexture(int n) {
|
|||
glBindTexture(GL_TEXTURE_2D, lastTex);
|
||||
if (glGetError() != 0) throw _T("Error binding texture.");
|
||||
|
||||
// Texture parameters
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
|
||||
|
||||
// Load image data into texture
|
||||
int height = frame.h;
|
||||
if (frame.format == FORMAT_YV12) height = frame.h * 3 / 2;
|
||||
|
@ -421,12 +429,16 @@ GLuint VideoContext::GetFrameAsTexture(int n) {
|
|||
int th = SmallestPowerOf2(frame.h);
|
||||
texW = float(frame.w)/float(tw);
|
||||
texH = float(frame.h)/float(th);
|
||||
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,tw,th,0,format,GL_UNSIGNED_BYTE,NULL);
|
||||
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,tw,th,0,format,GL_UNSIGNED_BYTE,NULL);
|
||||
if (glGetError() != 0) throw _T("Error allocating texture.");
|
||||
|
||||
// Set texture
|
||||
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
||||
//glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
|
||||
if (glGetError() != 0) throw _T("Error setting hinting.");
|
||||
|
||||
// Set priority
|
||||
float priority = 1.0f;
|
||||
glPrioritizeTextures(1,&lastTex,&priority);
|
||||
}
|
||||
|
||||
// Load texture data
|
||||
|
|
|
@ -37,12 +37,13 @@
|
|||
////////////
|
||||
// Includes
|
||||
#include "setup.h"
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include <wx/image.h>
|
||||
#include <string.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/config.h>
|
||||
#include <GL/glu.h>
|
||||
#include "utils.h"
|
||||
#include "video_display.h"
|
||||
#include "video_display_visual.h"
|
||||
|
@ -88,10 +89,14 @@ BEGIN_EVENT_TABLE(VideoDisplay, wxGLCanvas)
|
|||
END_EVENT_TABLE()
|
||||
|
||||
|
||||
//////////////
|
||||
// Parameters
|
||||
int attribList[2] = { WX_GL_RGBA , 0 };
|
||||
|
||||
///////////////
|
||||
// Constructor
|
||||
VideoDisplay::VideoDisplay(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name)
|
||||
: wxGLCanvas (parent, id, NULL, pos, size, style, name)
|
||||
: wxGLCanvas (parent, id, attribList, pos, size, style, name)
|
||||
{
|
||||
// Set options
|
||||
ControlSlider = NULL;
|
||||
|
@ -169,20 +174,21 @@ void VideoDisplay::Render() {
|
|||
|
||||
// Draw interleaved frame or luma of YV12
|
||||
glDisable(GL_BLEND);
|
||||
glBindTexture(GL_TEXTURE_2D, VideoContext::Get()->GetFrameAsTexture(-1));
|
||||
glColor4f(1.0f,1.0f,1.0f,1.0f);
|
||||
glBegin(GL_QUADS);
|
||||
// Top-left
|
||||
glTexCoord2f(left,top);
|
||||
glVertex2f(0,0);
|
||||
// Top-right
|
||||
glTexCoord2f(right,top);
|
||||
glVertex2f(sw,0);
|
||||
// Bottom-right
|
||||
glTexCoord2f(right,bot);
|
||||
glVertex2f(sw,sh);
|
||||
// Bottom-left
|
||||
glTexCoord2f(left,bot);
|
||||
glVertex2f(0,sh);
|
||||
// Bottom-right
|
||||
glTexCoord2f(right,bot);
|
||||
glVertex2f(sw,sh);
|
||||
// Top-right
|
||||
glTexCoord2f(right,top);
|
||||
glVertex2f(sw,0);
|
||||
glEnd();
|
||||
|
||||
// Draw UV planes
|
||||
|
@ -194,6 +200,7 @@ void VideoDisplay::Render() {
|
|||
visual->DrawOverlay();
|
||||
|
||||
// Swap buffers
|
||||
glFinish();
|
||||
SwapBuffers();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue