示例#1
0
Thumbnail * SaveRenderer::Render(GameSave * save)
{
	int width, height;
	Thumbnail * tempThumb;
	width = save->blockWidth;
	height = save->blockHeight;
	bool doCollapse = save->Collapsed();
	
	g->Acquire();
	g->Clear();
	sim->clear_sim();
	
	if(!sim->Load(save))
	{
#if defined(OGLR) || defined(OGLI)
		pixel * pData = NULL;
		unsigned char * texData = NULL;

		glTranslated(0, MENUSIZE, 0);
		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
	    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
	    glClear(GL_COLOR_BUFFER_BIT);
	    
	    ren->clearScreen(1.0f);
	    ren->ClearAccumulation();
		ren->RenderBegin();
		ren->RenderEnd();

		glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
		glTranslated(0, -MENUSIZE, 0);

		glEnable( GL_TEXTURE_2D );
		glBindTexture(GL_TEXTURE_2D, fboTex);

		pData = new pixel[XRES*YRES];
		texData = new unsigned char[(XRES*YRES)*PIXELSIZE];
		std::fill(texData, texData+(XRES*YRES)*PIXELSIZE, 0xDD);
		glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, texData);
		glDisable(GL_TEXTURE_2D);

		for(int x = 0; x < width*CELL; x++)
		{
			for(int y = 0; y < height*CELL; y++)
			{
				unsigned char red = texData[((((YRES-1-y)*XRES)+x)*4)];
				unsigned char green = texData[((((YRES-1-y)*XRES)+x)*4)+1];
				unsigned char blue = texData[((((YRES-1-y)*XRES)+x)*4)+2];

				pData[(y*(width*CELL))+x] = PIXRGBA(red, green, blue, 255);
			}
		}

		tempThumb = new Thumbnail(0, 0, pData, ui::Point(width*CELL, height*CELL));
		delete[] pData;
		delete[] texData;
		pData = NULL;
#else
		pixel * pData = NULL;
		pixel * dst;
		pixel * src = g->vid;

	    ren->ClearAccumulation();
		ren->RenderBegin();
		ren->RenderEnd();
	
		pData = (pixel *)malloc(PIXELSIZE * ((width*CELL)*(height*CELL)));
		dst = pData;
		for(int i = 0; i < height*CELL; i++)
		{
			memcpy(dst, src, (width*CELL)*PIXELSIZE);
			dst+=(width*CELL);///PIXELSIZE;
			src+=XRES+BARSIZE;
		}
		tempThumb = new Thumbnail(0, 0, pData, ui::Point(width*CELL, height*CELL));
		if(pData)
			free(pData);
#endif
	}
	if(doCollapse)
		save->Collapse();
	g->Release();
	return tempThumb;
}
示例#2
0
TPT_INLINE void VideoBuffer::BlendPixel(int x, int y, int r, int g, int b, int a)
{
#ifdef PIX32OGL
    pixel t;
    if (x<0 || y<0 || x>=Width || y>=Height)
        return;
    if (a!=255)
    {
        t = Buffer[y*(Width)+x];
        r = (a*r + (255-a)*PIXR(t)) >> 8;
        g = (a*g + (255-a)*PIXG(t)) >> 8;
        b = (a*b + (255-a)*PIXB(t)) >> 8;
        a = a > PIXA(t) ? a : PIXA(t);
    }
    Buffer[y*(Width)+x] = PIXRGBA(r,g,b,a);
#else
    pixel t;
    if (x<0 || y<0 || x>=Width || y>=Height)
        return;
    if (a!=255)
    {
        t = Buffer[y*(Width)+x];
        r = (a*r + (255-a)*PIXR(t)) >> 8;
        g = (a*g + (255-a)*PIXG(t)) >> 8;
        b = (a*b + (255-a)*PIXB(t)) >> 8;
    }
    Buffer[y*(Width)+x] = PIXRGB(r,g,b);
#endif
}