If Screen::RenderBMP is called before Screen::ScreenShot, the resulting BMP is blank.
NOTE: Testing colours: If -c 1 0 0 1 is passed, rectangle is rendered RED.
However, if Screen::ScreenShot is called, the rectangle is BLUE.
Something stupid going on with colours?
Tried messing with alpha channel, but things seem to always render regardless of their alpha value.
Should give up and do something actually important.
Rect bounds(0,0,1,1);
Colour c(0,0,0,1);
Rect bounds(0,0,1,1);
Colour c(0,0,0,1);
- const char * output_to_bmp = NULL;
+ const char * input_bmp = NULL;
+ const char * output_bmp = NULL;
const char * input_filename = NULL;
int i = 0;
const char * input_filename = NULL;
int i = 0;
case 'o':
mode = OUTPUT_TO_BMP;
if (++i >= argc)
case 'o':
mode = OUTPUT_TO_BMP;
if (++i >= argc)
- Fatal("No argument following -o switch");
- output_to_bmp = argv[i];
+ Fatal("No input argument following -o switch");
+ input_bmp = argv[i];
+ if (++i >= argc)
+ Fatal("No output argument following -o switch");
+ output_bmp = argv[i];
+
{
doc.Load(input_filename);
}
{
doc.Load(input_filename);
}
{
doc.Add(RECT_FILLED, Rect(0.2,0.2,0.6,0.6));
}
{
doc.Add(RECT_FILLED, Rect(0.2,0.2,0.6,0.6));
}
if (mode == LOOP)
MainLoop(doc, bounds, c);
else if (mode == OUTPUT_TO_BMP)
if (mode == LOOP)
MainLoop(doc, bounds, c);
else if (mode == OUTPUT_TO_BMP)
- OverlayBMP(doc, output_to_bmp, bounds, c);
+ OverlayBMP(doc, input_bmp, output_bmp, bounds, c);
using namespace std;
using namespace IPDF;
using namespace std;
using namespace IPDF;
-inline void OverlayBMP(Document & doc, const char * filename, const Rect & bounds = Rect(0,0,1,1), const Colour & c = Colour(0.f,0.f,0.f,1.f))
+inline void OverlayBMP(Document & doc, const char * input, const char * output, const Rect & bounds = Rect(0,0,1,1), const Colour & c = Colour(0.f,0.f,0.f,1.f))
{
View view(doc, bounds, c);
Screen scr;
//view.Render();
{
View view(doc, bounds, c);
Screen scr;
//view.Render();
- scr.RenderBMP(filename);
- //MainLoop(doc, bounds, c);
- sleep(3);
- scr.ScreenShot(filename);
+ sleep(5);
+ scr.ScreenShot(output);
}
inline void MainLoop(Document & doc, const Rect & bounds = Rect(0,0,1,1), const Colour & c = Colour(0.f,0.f,0.f,1.f))
}
inline void MainLoop(Document & doc, const Rect & bounds = Rect(0,0,1,1), const Colour & c = Colour(0.f,0.f,0.f,1.f))
}
m_gl_context = SDL_GL_CreateContext(m_window);
}
m_gl_context = SDL_GL_CreateContext(m_window);
+
+ glClearColor(1.f,1.f,1.f,1.f);
+ glClear(GL_COLOR_BUFFER_BIT);
+ Present();
ResizeViewport(800, 600);
ResizeViewport(800, 600);
if (surf == NULL)
Fatal("Failed to create SDL_Surface from pixel data - %s", SDL_GetError());
if (surf == NULL)
Fatal("Failed to create SDL_Surface from pixel data - %s", SDL_GetError());
+ GLenum texture_format = (surf->format->Rmask == 0x000000FF) ? GL_RGBA : GL_BGRA;
+ Debug("SDL_Surface %d BytesPerPixel, format %d (RGB = %d, BGR = %d, RGBA = %d, BGRA = %d)", surf->format->BytesPerPixel, texture_format, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA);
+
if (SDL_SaveBMP(surf, filename) != 0)
Fatal("SDL_SaveBMP failed - %s", SDL_GetError());
if (SDL_SaveBMP(surf, filename) != 0)
Fatal("SDL_SaveBMP failed - %s", SDL_GetError());
Fatal("Could not understand SDL_Surface format (%d colours)", bmp->format->BytesPerPixel);
break;
}
Fatal("Could not understand SDL_Surface format (%d colours)", bmp->format->BytesPerPixel);
break;
}
- Debug("SDL_Surface %d BytesPerPixel, format %d (RGB = %d, BGR = %d, RGBA = %d, BGRA = %d)", bmp->format->BytesPerPixel, texture_format, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA);
+ //Debug("SDL_Surface %d BytesPerPixel, format %d (RGB = %d, BGR = %d, RGBA = %d, BGRA = %d)", bmp->format->BytesPerPixel, texture_format, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA);
+ GLuint texID;
+ glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
glGenTextures(1, &texID);
glBindTexture(GL_TEXTURE_2D, texID);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
glTexImage2D(GL_TEXTURE_2D, 0, bmp->format->BytesPerPixel, w, h, 0, texture_format, GL_UNSIGNED_BYTE, bmp->pixels);
glTexImage2D(GL_TEXTURE_2D, 0, bmp->format->BytesPerPixel, w, h, 0, texture_format, GL_UNSIGNED_BYTE, bmp->pixels);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, texID);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ glOrtho(0.0, 1.0, 1.0, 0.0, -1.f, 1.f);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
- glTexCoord2i(0,0); glVertex2f(-0.5f*w, -0.5f*h);
- glTexCoord2i(1,0); glVertex2f(0.5f*w, -0.5f*h);
- glTexCoord2i(1,1); glVertex2f(0.5f*w, 0.5f*h);
- glTexCoord2i(0,1); glVertex2f(-0.5*w,0.5*h);
+ glTexCoord2i(0,0); glVertex2f(0,0);
+ glTexCoord2i(1,0); glVertex2f(1,0);
+ glTexCoord2i(1,1); glVertex2f(1,1);
+ glTexCoord2i(0,1); glVertex2f(0,1);
glEnd();
glDisable(GL_TEXTURE_2D);
glEnd();
glDisable(GL_TEXTURE_2D);
-
- //SDL_FreeSurface(bmp);
glClearColor(1.f,1.f,1.f,1.f);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(1.f,1.f,1.f,1.f);
glClear(GL_COLOR_BUFFER_BIT);
- DrawGrid(); // Draw the gridlines
+ //DrawGrid(); // Draw the gridlines
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();