mirror of https://github.com/stella-emu/stella.git
Hopefully finally fixed the issue of OpenGL texture re-generation whose
behaviour differs between OSX and other systems. Disabled output of the TIA display while in the debugger; this code needs to be rewritten. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1567 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
a8a2689269
commit
5dc7cba2a8
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: FrameBufferGL.cxx,v 1.119 2008-12-18 23:36:32 stephena Exp $
|
||||
// $Id: FrameBufferGL.cxx,v 1.120 2008-12-20 23:32:45 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifdef DISPLAY_OPENGL
|
||||
|
@ -361,19 +361,28 @@ cerr << "dimensions: " << endl
|
|||
<< " imageh = " << mode.image_h << endl
|
||||
<< endl;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Note that the following must be done in the order given
|
||||
// Basically, all surfaces must first be free'd before being
|
||||
// recreated
|
||||
// So, we delete the TIA surface first, then reset all other surfaces
|
||||
// (which frees all surfaces and then reloads all surfaces), then
|
||||
// re-create the TIA surface (if necessary)
|
||||
// In this way, all free()'s come before all reload()'s
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
// The framebuffer only takes responsibility for TIA surfaces
|
||||
// Other surfaces (such as the ones used for dialogs) are allocated
|
||||
// in the Dialog class
|
||||
if(!inUIMode)
|
||||
{
|
||||
delete myTiaSurface;
|
||||
myTiaSurface = new FBSurfaceGL(*this, baseWidth, baseHeight,
|
||||
mode.image_w, mode.image_h);
|
||||
}
|
||||
delete myTiaSurface; myTiaSurface = NULL;
|
||||
|
||||
// Any previously allocated textures currently in use by various UI items
|
||||
// need to be refreshed as well (only seems to be required for OSX)
|
||||
reloadSurfaces();
|
||||
resetSurfaces();
|
||||
|
||||
if(!inUIMode)
|
||||
myTiaSurface = new FBSurfaceGL(*this, baseWidth, baseHeight,
|
||||
mode.image_w, mode.image_h);
|
||||
|
||||
// Make sure any old parts of the screen are erased
|
||||
p_glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
@ -603,7 +612,7 @@ cerr << " FBSurfaceGL::~FBSurfaceGL(): myTexID = " << myTexID << " @ " << this
|
|||
if(myTexture)
|
||||
SDL_FreeSurface(myTexture);
|
||||
|
||||
p_glDeleteTextures(1, &myTexID);
|
||||
free();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -787,6 +796,14 @@ void FBSurfaceGL::update()
|
|||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FBSurfaceGL::free()
|
||||
{
|
||||
p_glDeleteTextures(1, &myTexID);
|
||||
|
||||
cerr << " ==> FBSurfaceGL::free(): myTexID = " << myTexID << " @ " << this << endl;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FBSurfaceGL::reload()
|
||||
{
|
||||
|
@ -813,8 +830,6 @@ void FBSurfaceGL::reload()
|
|||
myFilterParamName = "GL_NEAREST";
|
||||
}
|
||||
*/
|
||||
|
||||
// p_glDeleteTextures(1, &myTexID);
|
||||
p_glGenTextures(1, &myTexID);
|
||||
p_glBindTexture(myTexTarget, myTexID);
|
||||
p_glTexParameteri(myTexTarget, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: FrameBufferGL.hxx,v 1.62 2008-12-14 21:44:06 stephena Exp $
|
||||
// $Id: FrameBufferGL.hxx,v 1.63 2008-12-20 23:32:46 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef FRAMEBUFFER_GL_HXX
|
||||
|
@ -35,7 +35,7 @@ class FBSurfaceGL;
|
|||
This class implements an SDL OpenGL framebuffer.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBufferGL.hxx,v 1.62 2008-12-14 21:44:06 stephena Exp $
|
||||
@version $Id: FrameBufferGL.hxx,v 1.63 2008-12-20 23:32:46 stephena Exp $
|
||||
*/
|
||||
class FrameBufferGL : public FrameBuffer
|
||||
{
|
||||
|
@ -206,7 +206,7 @@ class FrameBufferGL : public FrameBuffer
|
|||
A surface suitable for OpenGL rendering mode.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBufferGL.hxx,v 1.62 2008-12-14 21:44:06 stephena Exp $
|
||||
@version $Id: FrameBufferGL.hxx,v 1.63 2008-12-20 23:32:46 stephena Exp $
|
||||
*/
|
||||
class FBSurfaceGL : public FBSurface
|
||||
{
|
||||
|
@ -232,6 +232,7 @@ class FBSurfaceGL : public FBSurface
|
|||
void setHeight(uInt32 h);
|
||||
void translateCoords(Int32& x, Int32& y) const;
|
||||
void update();
|
||||
void free();
|
||||
void reload();
|
||||
|
||||
private:
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: FrameBufferSoft.hxx,v 1.56 2008-12-12 15:51:06 stephena Exp $
|
||||
// $Id: FrameBufferSoft.hxx,v 1.57 2008-12-20 23:32:46 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef FRAMEBUFFER_SOFT_HXX
|
||||
|
@ -32,7 +32,7 @@ class RectList;
|
|||
This class implements an SDL software framebuffer.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.56 2008-12-12 15:51:06 stephena Exp $
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.57 2008-12-20 23:32:46 stephena Exp $
|
||||
*/
|
||||
class FrameBufferSoft : public FrameBuffer
|
||||
{
|
||||
|
@ -172,7 +172,7 @@ class FrameBufferSoft : public FrameBuffer
|
|||
A surface suitable for software rendering mode.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.56 2008-12-12 15:51:06 stephena Exp $
|
||||
@version $Id: FrameBufferSoft.hxx,v 1.57 2008-12-20 23:32:46 stephena Exp $
|
||||
*/
|
||||
class FBSurfaceSoft : public FBSurface
|
||||
{
|
||||
|
@ -195,6 +195,7 @@ class FBSurfaceSoft : public FBSurface
|
|||
void setHeight(uInt32 h);
|
||||
void translateCoords(Int32& x, Int32& y) const;
|
||||
void update();
|
||||
void free() { } // Not required for software mode
|
||||
void reload() { } // Not required for software mode
|
||||
|
||||
private:
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: TiaOutputWidget.cxx,v 1.18 2008-07-25 12:41:41 stephena Exp $
|
||||
// $Id: TiaOutputWidget.cxx,v 1.19 2008-12-20 23:32:46 stephena Exp $
|
||||
//
|
||||
// Based on code from ScummVM - Scumm Interpreter
|
||||
// Copyright (C) 2002-2004 The ScummVM project
|
||||
|
@ -143,6 +143,7 @@ void TiaOutputWidget::handleCommand(CommandSender* sender, int cmd, int data, in
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void TiaOutputWidget::drawWidget(bool hilite)
|
||||
{
|
||||
return;
|
||||
// FIXME - check if we're in 'greyed out mode' and act accordingly
|
||||
instance().frameBuffer().refresh();
|
||||
instance().frameBuffer().drawMediaSource();
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: FrameBuffer.cxx,v 1.144 2008-12-12 18:32:53 stephena Exp $
|
||||
// $Id: FrameBuffer.cxx,v 1.145 2008-12-20 23:32:46 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <algorithm>
|
||||
|
@ -408,9 +408,17 @@ FBSurface* FrameBuffer::surface(int id) const
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBuffer::reloadSurfaces()
|
||||
void FrameBuffer::resetSurfaces()
|
||||
{
|
||||
// Free all resources for each surface, then reload them
|
||||
// Due to possible timing and/or synchronization issues, all free()'s
|
||||
// are done first, then all reload()'s
|
||||
// Any derived FrameBuffer classes that call this method should be
|
||||
// aware of these restrictions, and act accordingly
|
||||
|
||||
map<int,FBSurface*>::iterator iter;
|
||||
for(iter = mySurfaceList.begin(); iter != mySurfaceList.end(); ++iter)
|
||||
iter->second->free();
|
||||
for(iter = mySurfaceList.begin(); iter != mySurfaceList.end(); ++iter)
|
||||
iter->second->reload();
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: FrameBuffer.hxx,v 1.106 2008-12-12 18:32:53 stephena Exp $
|
||||
// $Id: FrameBuffer.hxx,v 1.107 2008-12-20 23:32:46 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef FRAMEBUFFER_HXX
|
||||
|
@ -91,7 +91,7 @@ enum {
|
|||
turn drawn here as well.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBuffer.hxx,v 1.106 2008-12-12 18:32:53 stephena Exp $
|
||||
@version $Id: FrameBuffer.hxx,v 1.107 2008-12-20 23:32:46 stephena Exp $
|
||||
*/
|
||||
class FrameBuffer
|
||||
{
|
||||
|
@ -387,10 +387,10 @@ class FrameBuffer
|
|||
virtual string about() const = 0;
|
||||
|
||||
/**
|
||||
Issues the 'reload' instruction to all surfaces that the
|
||||
Issues a 'free' and 'reload' instruction to all surfaces that the
|
||||
framebuffer knows about.
|
||||
*/
|
||||
void reloadSurfaces();
|
||||
void resetSurfaces();
|
||||
|
||||
protected:
|
||||
// The parent system for the framebuffer
|
||||
|
@ -549,7 +549,7 @@ class FrameBuffer
|
|||
FrameBuffer type.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: FrameBuffer.hxx,v 1.106 2008-12-12 18:32:53 stephena Exp $
|
||||
@version $Id: FrameBuffer.hxx,v 1.107 2008-12-20 23:32:46 stephena Exp $
|
||||
*/
|
||||
// Text alignment modes for drawString()
|
||||
enum TextAlignment {
|
||||
|
@ -683,8 +683,15 @@ class FBSurface
|
|||
*/
|
||||
virtual void update() = 0;
|
||||
|
||||
/**
|
||||
This method should be called to free any resources being used by
|
||||
the surface.
|
||||
*/
|
||||
virtual void free() = 0;
|
||||
|
||||
/**
|
||||
This method should be called to reload the surface data/state.
|
||||
It will normally be called after free().
|
||||
*/
|
||||
virtual void reload() = 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue