]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/gui/glwidget.cpp
Virtual Jaguar 2.0.0 release.
[virtualjaguar] / src / gui / glwidget.cpp
index 109c1c9b1ec235b2e6cc9098e391691f6dae972f..e09ebd2fac1c065ae84223371e613d6f9d4c0816 100644 (file)
 
 #include "glwidget.h"
 
+#include "jaguar.h"
 #include "settings.h"
+#include "tom.h"
+
+#ifdef __GCCWIN32__
+// Apparently on win32, various OpenGL constants aren't pulled in.
+#include <GL/glext.h>
+#endif
 
 GLWidget::GLWidget(QWidget * parent/*= 0*/): QGLWidget(parent), texture(0),
-       textureWidth(0), textureHeight(0), buffer(0), rasterWidth(64), rasterHeight(64)
-//     textureWidth(0), textureHeight(0), buffer(0), rasterWidth(256), rasterHeight(256)
+       textureWidth(0), textureHeight(0), buffer(0), rasterWidth(320), rasterHeight(240)
 {
+       // Screen pitch has to be the texture width (in 32-bit pixels)...
+       JaguarSetScreenPitch(1024);
 }
 
 GLWidget::~GLWidget()
 {
+//     free(backbuffer);
 }
 
 void GLWidget::initializeGL()
@@ -42,6 +51,9 @@ void GLWidget::initializeGL()
 
 void GLWidget::paintGL()
 {
+//kludge
+rasterHeight = (vjs.hardwareTypeNTSC ? 240 : 256);
+
        unsigned outputWidth  = width();
        unsigned outputHeight = height();
 
@@ -53,14 +65,15 @@ void GLWidget::paintGL()
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
 
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (smoothGLOutput ? GL_LINEAR : GL_NEAREST));
-       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (smoothGLOutput ? GL_LINEAR : GL_NEAREST));
-//     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST /*GL_LINEAR*/);
-//     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST /*GL_LINEAR*/);
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (vjs.glFilter ? GL_LINEAR : GL_NEAREST));
+       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (vjs.glFilter ? GL_LINEAR : GL_NEAREST));
 //     glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, buffer);
-       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer);
+//more kludge
+       glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, TOMGetVideoModeWidth(), rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer);
+//     glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, rasterWidth, rasterHeight, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, buffer);
 
-       double w = (double)rasterWidth  / (double)textureWidth;
+       double w = (double)TOMGetVideoModeWidth()  / (double)textureWidth;
+//     double w = (double)rasterWidth  / (double)textureWidth;
        double h = (double)rasterHeight / (double)textureHeight;
        unsigned u = outputWidth;
        unsigned v = outputHeight;
@@ -77,13 +90,9 @@ void GLWidget::resizeGL(int width, int height)
 {
        if (width > textureWidth || height > textureHeight)
        {
-//             textureWidth  = max(width,  textureWidth);
-//             textureHeight = max(height, textureHeight);
-// Seems that power of 2 sizes are still mandatory...
-               textureWidth  = 1024;//(width > textureWidth ? width : textureWidth);
-               textureHeight = 512;//(height > textureHeight ? height : textureHeight);
-//             textureWidth  = (width > textureWidth ? width : textureWidth);
-//             textureHeight = (height > textureHeight ? height : textureHeight);
+               // Seems that power of 2 sizes are still mandatory...
+               textureWidth  = 1024;
+               textureHeight = 512;
 #if 0
 printf("Resizing: new texture width/height = %i x %i\n", textureWidth, textureHeight);
 printf("Resizing: new raster width/height = %i x %i\n", rasterWidth, rasterHeight);
@@ -96,12 +105,15 @@ printf("Resizing: new raster width/height = %i x %i\n", rasterWidth, rasterHeigh
                }
 
                buffer = new uint32_t[textureWidth * textureHeight];
+               JaguarSetScreenBuffer(buffer);
+
+//???
+memset(buffer, 0xFF, textureWidth * textureHeight * sizeof(uint32_t));
                glGenTextures(1, &texture);
                glBindTexture(GL_TEXTURE_2D, texture);
                glPixelStorei(GL_UNPACK_ROW_LENGTH, textureWidth);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-//             glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureWidth, textureHeight, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, NULL);
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureWidth, textureHeight, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, NULL);
        }
 }