Fixed OpenGL display for mesa drivers
This commit is contained in:
parent
f099e3ba71
commit
d94765205a
|
@ -48,6 +48,12 @@ void ScreenAreaGl::on_realize()
|
||||||
{
|
{
|
||||||
Gtk::DrawingArea::on_realize();
|
Gtk::DrawingArea::on_realize();
|
||||||
|
|
||||||
|
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
|
||||||
|
if (!glwindow->gl_begin(get_gl_context()))
|
||||||
|
return;
|
||||||
|
|
||||||
|
glViewport(0, 0, get_width(), get_height());
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
|
@ -57,6 +63,8 @@ void ScreenAreaGl::on_realize()
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
|
|
||||||
glClearColor(0.0, 0.0, 0.0, 1.0);
|
glClearColor(0.0, 0.0, 0.0, 1.0);
|
||||||
|
|
||||||
|
glwindow->gl_end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenAreaGl::vDrawPixels(u8 * _puiData)
|
void ScreenAreaGl::vDrawPixels(u8 * _puiData)
|
||||||
|
@ -77,21 +85,28 @@ void ScreenAreaGl::vDrawBlackScreen()
|
||||||
|
|
||||||
void ScreenAreaGl::vOnWidgetResize()
|
void ScreenAreaGl::vOnWidgetResize()
|
||||||
{
|
{
|
||||||
m_dScaleFactor = min<double>(get_height() / (double)m_iScaledHeight, get_width() / (double)m_iScaledWidth);
|
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
|
||||||
|
|
||||||
|
if (!glwindow->gl_begin(get_gl_context()))
|
||||||
|
return;
|
||||||
|
|
||||||
glViewport(0, 0, get_width(), get_height());
|
glViewport(0, 0, get_width(), get_height());
|
||||||
|
|
||||||
m_dAreaTop = 1 - m_dScaleFactor * m_iScaledHeight / (double)get_height();
|
glwindow->gl_end();
|
||||||
m_dAreaLeft = 1 - m_dScaleFactor * m_iScaledWidth / (double)get_width();
|
|
||||||
|
m_dScaleFactor = min<double>(get_height() / (double)m_iScaledHeight, get_width() / (double)m_iScaledWidth);
|
||||||
|
m_dAreaTop = (1 - m_dScaleFactor * m_iScaledHeight / (double)get_height()) / 2;
|
||||||
|
m_dAreaLeft = (1 - m_dScaleFactor * m_iScaledWidth / (double)get_width()) / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScreenAreaGl::on_expose_event(GdkEventExpose * _pstEvent)
|
bool ScreenAreaGl::on_expose_event(GdkEventExpose * _pstEvent)
|
||||||
{
|
{
|
||||||
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
|
|
||||||
|
|
||||||
glRasterPos2f(-1.0f + m_dAreaLeft, 1.0f - m_dAreaTop);
|
|
||||||
glPixelZoom(m_dScaleFactor, -m_dScaleFactor);
|
glPixelZoom(m_dScaleFactor, -m_dScaleFactor);
|
||||||
|
glRasterPos2f(m_dAreaLeft, m_dAreaTop);
|
||||||
|
|
||||||
glPixelStorei(GL_UNPACK_ROW_LENGTH, m_iScaledWidth + 1);
|
glPixelStorei(GL_UNPACK_ROW_LENGTH, m_iScaledWidth + 1);
|
||||||
|
|
||||||
|
Glib::RefPtr<Gdk::GL::Window> glwindow = get_gl_window();
|
||||||
if (!glwindow->gl_begin(get_gl_context()))
|
if (!glwindow->gl_begin(get_gl_context()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -218,8 +218,6 @@ void ScreenArea::vUpdateSize()
|
||||||
m_iScaledWidth = m_iFilterScale * m_iWidth;
|
m_iScaledWidth = m_iFilterScale * m_iWidth;
|
||||||
m_iScaledHeight = m_iFilterScale * m_iHeight;
|
m_iScaledHeight = m_iFilterScale * m_iHeight;
|
||||||
|
|
||||||
vOnWidgetResize();
|
|
||||||
|
|
||||||
m_puiPixels = new u32[(m_iScaledWidth + 1) * m_iScaledHeight];
|
m_puiPixels = new u32[(m_iScaledWidth + 1) * m_iScaledHeight];
|
||||||
m_puiDelta = new u8[(m_iWidth + 2) * (m_iHeight + 2) * sizeof(u32)];
|
m_puiDelta = new u8[(m_iWidth + 2) * (m_iHeight + 2) * sizeof(u32)];
|
||||||
memset(m_puiPixels, 0, (m_iScaledWidth + 1) * m_iScaledHeight * sizeof(u32));
|
memset(m_puiPixels, 0, (m_iScaledWidth + 1) * m_iScaledHeight * sizeof(u32));
|
||||||
|
|
Loading…
Reference in New Issue