mirror of https://github.com/stella-emu/stella.git
Some more code pruning. Basically, all classname references to OpenGL
have been changed to 'SDL2'. From this point on, the OpenGL-specific code will be removed, and replaced by SDL2-specific hardware-accelerated code. Cleaned up (mostly) the API of FrameBuffer vs FrameBufferSDL2. Since the FrameBuffer class is an emucore object, it should have no knowledge of SDL, or any particular rendering toolkit for that matter (just in case we want to move to SDL3 eventually :) ). At this point, all checks for OpenGL have been removed, so if you don't have it on your system, Stella will fail to compile and/or run. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2832 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
40f9da7839
commit
9137b93c80
|
@ -14,12 +14,10 @@
|
||||||
CXXFLAGS="$CXXFLAGS $CPPFLAGS"
|
CXXFLAGS="$CXXFLAGS $CPPFLAGS"
|
||||||
|
|
||||||
# default lib behaviour yes/no/auto
|
# default lib behaviour yes/no/auto
|
||||||
_opengl=auto
|
|
||||||
_libpng=auto
|
_libpng=auto
|
||||||
_zlib=auto
|
_zlib=auto
|
||||||
|
|
||||||
# default option behaviour yes/no
|
# default option behaviour yes/no
|
||||||
_build_gl=yes
|
|
||||||
_build_windowed=yes
|
_build_windowed=yes
|
||||||
_build_sound=yes
|
_build_sound=yes
|
||||||
_build_debugger=yes
|
_build_debugger=yes
|
||||||
|
@ -201,10 +199,6 @@ Installation directories:
|
||||||
--datadir=DIR directory to install icons/data files [PREFIX/share]
|
--datadir=DIR directory to install icons/data files [PREFIX/share]
|
||||||
|
|
||||||
Optional Features:
|
Optional Features:
|
||||||
--enable-gl enable/disable OpenGL rendering support [enabled]
|
|
||||||
--disable-gl
|
|
||||||
--enable-windowed enable/disable windowed rendering modes [enabled]
|
|
||||||
--disable-windowed
|
|
||||||
--enable-sound enable/disable sound support [enabled]
|
--enable-sound enable/disable sound support [enabled]
|
||||||
--disable-sound
|
--disable-sound
|
||||||
--enable-debugger enable/disable all debugger options [enabled]
|
--enable-debugger enable/disable all debugger options [enabled]
|
||||||
|
@ -215,6 +209,8 @@ Optional Features:
|
||||||
--disable-cheats
|
--disable-cheats
|
||||||
--enable-thumb enable/disable Thumb ARM support [enabled]
|
--enable-thumb enable/disable Thumb ARM support [enabled]
|
||||||
--disable-thumb
|
--disable-thumb
|
||||||
|
--enable-windowed enable/disable windowed rendering modes [enabled]
|
||||||
|
--disable-windowed
|
||||||
--enable-shared build shared binary [enabled]
|
--enable-shared build shared binary [enabled]
|
||||||
--enable-static build static binary (if possible) [disabled]
|
--enable-static build static binary (if possible) [disabled]
|
||||||
--disable-static
|
--disable-static
|
||||||
|
@ -244,10 +240,6 @@ done # for parm in ...
|
||||||
|
|
||||||
for ac_option in $@; do
|
for ac_option in $@; do
|
||||||
case "$ac_option" in
|
case "$ac_option" in
|
||||||
--enable-gl) _build_gl=yes ;;
|
|
||||||
--disable-gl) _build_gl=no ;;
|
|
||||||
--enable-windowed) _build_windowed=yes ;;
|
|
||||||
--disable-windowed) _build_windowed=no ;;
|
|
||||||
--enable-sound) _build_sound=yes ;;
|
--enable-sound) _build_sound=yes ;;
|
||||||
--disable-sound) _build_sound=no ;;
|
--disable-sound) _build_sound=no ;;
|
||||||
--enable-debugger) _build_debugger=yes ;;
|
--enable-debugger) _build_debugger=yes ;;
|
||||||
|
@ -256,6 +248,8 @@ for ac_option in $@; do
|
||||||
--disable-joystick) _build_joystick=no ;;
|
--disable-joystick) _build_joystick=no ;;
|
||||||
--enable-cheats) _build_cheats=yes ;;
|
--enable-cheats) _build_cheats=yes ;;
|
||||||
--disable-cheats) _build_cheats=no ;;
|
--disable-cheats) _build_cheats=no ;;
|
||||||
|
--enable-windowed) _build_windowed=yes ;;
|
||||||
|
--disable-windowed) _build_windowed=no ;;
|
||||||
--enable-thumb) _build_thumb=yes ;;
|
--enable-thumb) _build_thumb=yes ;;
|
||||||
--disable-thumb) _build_thumb=no ;;
|
--disable-thumb) _build_thumb=no ;;
|
||||||
--enable-shared) _build_static=no ;;
|
--enable-shared) _build_static=no ;;
|
||||||
|
@ -610,22 +604,6 @@ else
|
||||||
echo "none found, using built-in version"
|
echo "none found, using built-in version"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#
|
|
||||||
# Check for GL
|
|
||||||
#
|
|
||||||
echocheck "opengl"
|
|
||||||
if test "$_opengl" = auto ; then
|
|
||||||
_opengl=no
|
|
||||||
cat > $TMPC << EOF
|
|
||||||
#include <string.h>
|
|
||||||
#include <GL/gl.h>
|
|
||||||
#include <GL/glu.h>
|
|
||||||
int main(void) { return 0; }
|
|
||||||
EOF
|
|
||||||
cc_check $LDFLAGS $CXXFLAGS && _opengl=yes
|
|
||||||
fi
|
|
||||||
echo "$_opengl"
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# figure out installation directories
|
# figure out installation directories
|
||||||
#
|
#
|
||||||
|
@ -637,28 +615,6 @@ echo
|
||||||
echo_n "Summary:"
|
echo_n "Summary:"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
if test "$_build_gl" = "yes" ; then
|
|
||||||
if test "$_opengl" = "yes" ; then
|
|
||||||
echo_n " OpenGL rendering enabled"
|
|
||||||
echo
|
|
||||||
else
|
|
||||||
echo_n " OpenGL rendering disabled (missing OpenGL headers)"
|
|
||||||
echo
|
|
||||||
_build_gl=no
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo_n " OpenGL rendering disabled"
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$_build_windowed" = "yes" ; then
|
|
||||||
echo_n " Windowed rendering modes enabled"
|
|
||||||
echo
|
|
||||||
else
|
|
||||||
echo_n " Windowed rendering modes disabled"
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$_build_sound" = "yes" ; then
|
if test "$_build_sound" = "yes" ; then
|
||||||
echo_n " Sound support enabled"
|
echo_n " Sound support enabled"
|
||||||
echo
|
echo
|
||||||
|
@ -699,6 +655,14 @@ else
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$_build_windowed" = "yes" ; then
|
||||||
|
echo_n " Windowed rendering modes enabled"
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
echo_n " Windowed rendering modes disabled"
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$_build_thumb" = yes ; then
|
if test "$_build_thumb" = yes ; then
|
||||||
echo_n " Thumb ARM emulation support enabled"
|
echo_n " Thumb ARM emulation support enabled"
|
||||||
echo
|
echo
|
||||||
|
@ -786,10 +750,6 @@ else
|
||||||
INCLUDES="$INCLUDES -I$ZLIB"
|
INCLUDES="$INCLUDES -I$ZLIB"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$_build_gl" = yes ; then
|
|
||||||
DEFINES="$DEFINES -DDISPLAY_OPENGL"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$_build_windowed" = yes ; then
|
if test "$_build_windowed" = yes ; then
|
||||||
DEFINES="$DEFINES -DWINDOWED_SUPPORT"
|
DEFINES="$DEFINES -DWINDOWED_SUPPORT"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -17,19 +17,17 @@
|
||||||
// $Id$
|
// $Id$
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
#include "Font.hxx"
|
#include "Font.hxx"
|
||||||
#include "FrameBufferGL.hxx"
|
#include "FrameBufferSDL2.hxx"
|
||||||
#include "TIA.hxx"
|
#include "TIA.hxx"
|
||||||
#include "NTSCFilter.hxx"
|
#include "NTSCFilter.hxx"
|
||||||
|
|
||||||
#include "FBSurfaceTIA.hxx"
|
#include "FBSurfaceTIA.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FBSurfaceTIA::FBSurfaceTIA(FrameBufferGL& buffer)
|
FBSurfaceTIA::FBSurfaceTIA(FrameBufferSDL2& buffer)
|
||||||
: myFB(buffer),
|
: myFB(buffer),
|
||||||
myGL(myFB.p_gl),
|
myGL(myFB.p_gl),
|
||||||
myTexture(NULL),
|
myTexture(NULL),
|
||||||
|
@ -44,8 +42,8 @@ FBSurfaceTIA::FBSurfaceTIA(FrameBufferGL& buffer)
|
||||||
|
|
||||||
// Texture width is set to contain all possible sizes for a TIA image,
|
// Texture width is set to contain all possible sizes for a TIA image,
|
||||||
// including Blargg filtering
|
// including Blargg filtering
|
||||||
myTexWidth = FrameBufferGL::power_of_two(ATARI_NTSC_OUT_WIDTH(160));
|
myTexWidth = FrameBufferSDL2::power_of_two(ATARI_NTSC_OUT_WIDTH(160));
|
||||||
myTexHeight = FrameBufferGL::power_of_two(320);
|
myTexHeight = FrameBufferSDL2::power_of_two(320);
|
||||||
|
|
||||||
// Create a surface in the same format as the parent GL class
|
// Create a surface in the same format as the parent GL class
|
||||||
const SDL_PixelFormat& pf = myFB.myPixelFormat;
|
const SDL_PixelFormat& pf = myFB.myPixelFormat;
|
||||||
|
@ -95,7 +93,7 @@ void FBSurfaceTIA::update()
|
||||||
// a post-processing filter by blending several frames.
|
// a post-processing filter by blending several frames.
|
||||||
switch(myFB.myFilterType)
|
switch(myFB.myFilterType)
|
||||||
{
|
{
|
||||||
case FrameBufferGL::kNormal:
|
case FrameBufferSDL2::kNormal:
|
||||||
{
|
{
|
||||||
uInt32 bufofsY = 0;
|
uInt32 bufofsY = 0;
|
||||||
uInt32 screenofsY = 0;
|
uInt32 screenofsY = 0;
|
||||||
|
@ -110,7 +108,7 @@ void FBSurfaceTIA::update()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FrameBufferGL::kPhosphor:
|
case FrameBufferSDL2::kPhosphor:
|
||||||
{
|
{
|
||||||
uInt32 bufofsY = 0;
|
uInt32 bufofsY = 0;
|
||||||
uInt32 screenofsY = 0;
|
uInt32 screenofsY = 0;
|
||||||
|
@ -128,13 +126,13 @@ void FBSurfaceTIA::update()
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FrameBufferGL::kBlarggNormal:
|
case FrameBufferSDL2::kBlarggNormal:
|
||||||
{
|
{
|
||||||
myFB.myNTSCFilter.blit_single(currentFrame, width, height,
|
myFB.myNTSCFilter.blit_single(currentFrame, width, height,
|
||||||
buffer, myTexture->pitch);
|
buffer, myTexture->pitch);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FrameBufferGL::kBlarggPhosphor:
|
case FrameBufferSDL2::kBlarggPhosphor:
|
||||||
{
|
{
|
||||||
myFB.myNTSCFilter.blit_double(currentFrame, previousFrame, width, height,
|
myFB.myNTSCFilter.blit_double(currentFrame, previousFrame, width, height,
|
||||||
buffer, myTexture->pitch);
|
buffer, myTexture->pitch);
|
||||||
|
@ -391,5 +389,3 @@ void FBSurfaceTIA::setTIAPalette(const uInt32* palette)
|
||||||
{
|
{
|
||||||
myFB.myNTSCFilter.setTIAPalette(myFB, palette);
|
myFB.myNTSCFilter.setTIAPalette(myFB, palette);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -20,11 +20,9 @@
|
||||||
#ifndef FB_SURFACE_TIA_HXX
|
#ifndef FB_SURFACE_TIA_HXX
|
||||||
#define FB_SURFACE_TIA_HXX
|
#define FB_SURFACE_TIA_HXX
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBuffer.hxx"
|
||||||
#include "FrameBufferGL.hxx"
|
#include "FrameBufferSDL2.hxx"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A surface suitable for OpenGL rendering mode, but specifically for
|
A surface suitable for OpenGL rendering mode, but specifically for
|
||||||
|
@ -36,10 +34,10 @@
|
||||||
*/
|
*/
|
||||||
class FBSurfaceTIA : public FBSurface
|
class FBSurfaceTIA : public FBSurface
|
||||||
{
|
{
|
||||||
friend class FrameBufferGL;
|
friend class FrameBufferSDL2;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FBSurfaceTIA(FrameBufferGL& buffer);
|
FBSurfaceTIA(FrameBufferSDL2& buffer);
|
||||||
virtual ~FBSurfaceTIA();
|
virtual ~FBSurfaceTIA();
|
||||||
|
|
||||||
// TIA surfaces don't implement most of the drawing primitives,
|
// TIA surfaces don't implement most of the drawing primitives,
|
||||||
|
@ -65,8 +63,8 @@ class FBSurfaceTIA : public FBSurface
|
||||||
void updateCoords();
|
void updateCoords();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FrameBufferGL& myFB;
|
FrameBufferSDL2& myFB;
|
||||||
const FrameBufferGL::GLpointers& myGL;
|
const FrameBufferSDL2::GLpointers& myGL;
|
||||||
const TIA* myTIA;
|
const TIA* myTIA;
|
||||||
SDL_Surface* myTexture;
|
SDL_Surface* myTexture;
|
||||||
uInt32 myPitch;
|
uInt32 myPitch;
|
||||||
|
@ -85,6 +83,4 @@ class FBSurfaceTIA : public FBSurface
|
||||||
GLfloat myScanlineIntensityF;
|
GLfloat myScanlineIntensityF;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -17,15 +17,11 @@
|
||||||
// $Id$
|
// $Id$
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#include "Font.hxx"
|
#include "Font.hxx"
|
||||||
#include "FrameBufferGL.hxx"
|
#include "FBSurfaceUI.hxx"
|
||||||
|
|
||||||
#include "FBSurfaceGL.hxx"
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FBSurfaceGL::FBSurfaceGL(FrameBufferGL& buffer, uInt32 width, uInt32 height)
|
FBSurfaceUI::FBSurfaceUI(FrameBufferSDL2& buffer, uInt32 width, uInt32 height)
|
||||||
: myFB(buffer),
|
: myFB(buffer),
|
||||||
myGL(myFB.p_gl),
|
myGL(myFB.p_gl),
|
||||||
myTexture(NULL),
|
myTexture(NULL),
|
||||||
|
@ -37,8 +33,8 @@ FBSurfaceGL::FBSurfaceGL(FrameBufferGL& buffer, uInt32 width, uInt32 height)
|
||||||
myImageH(height)
|
myImageH(height)
|
||||||
{
|
{
|
||||||
// Fill buffer struct with valid data
|
// Fill buffer struct with valid data
|
||||||
myTexWidth = FrameBufferGL::power_of_two(myImageW);
|
myTexWidth = FrameBufferSDL2::power_of_two(myImageW);
|
||||||
myTexHeight = FrameBufferGL::power_of_two(myImageH);
|
myTexHeight = FrameBufferSDL2::power_of_two(myImageH);
|
||||||
myTexCoordW = (GLfloat) myImageW / myTexWidth;
|
myTexCoordW = (GLfloat) myImageW / myTexWidth;
|
||||||
myTexCoordH = (GLfloat) myImageH / myTexHeight;
|
myTexCoordH = (GLfloat) myImageH / myTexHeight;
|
||||||
|
|
||||||
|
@ -55,7 +51,7 @@ FBSurfaceGL::FBSurfaceGL(FrameBufferGL& buffer, uInt32 width, uInt32 height)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FBSurfaceGL::~FBSurfaceGL()
|
FBSurfaceUI::~FBSurfaceUI()
|
||||||
{
|
{
|
||||||
if(myTexture)
|
if(myTexture)
|
||||||
SDL_FreeSurface(myTexture);
|
SDL_FreeSurface(myTexture);
|
||||||
|
@ -64,7 +60,7 @@ FBSurfaceGL::~FBSurfaceGL()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color)
|
void FBSurfaceUI::hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color)
|
||||||
{
|
{
|
||||||
uInt32* buffer = (uInt32*) myTexture->pixels + y * myPitch + x;
|
uInt32* buffer = (uInt32*) myTexture->pixels + y * myPitch + x;
|
||||||
while(x++ <= x2)
|
while(x++ <= x2)
|
||||||
|
@ -72,7 +68,7 @@ void FBSurfaceGL::hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::vLine(uInt32 x, uInt32 y, uInt32 y2, uInt32 color)
|
void FBSurfaceUI::vLine(uInt32 x, uInt32 y, uInt32 y2, uInt32 color)
|
||||||
{
|
{
|
||||||
uInt32* buffer = (uInt32*) myTexture->pixels + y * myPitch + x;
|
uInt32* buffer = (uInt32*) myTexture->pixels + y * myPitch + x;
|
||||||
while(y++ <= y2)
|
while(y++ <= y2)
|
||||||
|
@ -83,7 +79,7 @@ void FBSurfaceGL::vLine(uInt32 x, uInt32 y, uInt32 y2, uInt32 color)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, uInt32 color)
|
void FBSurfaceUI::fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, uInt32 color)
|
||||||
{
|
{
|
||||||
// Fill the rectangle
|
// Fill the rectangle
|
||||||
SDL_Rect tmp;
|
SDL_Rect tmp;
|
||||||
|
@ -95,7 +91,7 @@ void FBSurfaceGL::fillRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h, uInt32 color)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::drawChar(const GUI::Font& font, uInt8 chr,
|
void FBSurfaceUI::drawChar(const GUI::Font& font, uInt8 chr,
|
||||||
uInt32 tx, uInt32 ty, uInt32 color)
|
uInt32 tx, uInt32 ty, uInt32 color)
|
||||||
{
|
{
|
||||||
const FontDesc& desc = font.desc();
|
const FontDesc& desc = font.desc();
|
||||||
|
@ -144,7 +140,7 @@ void FBSurfaceGL::drawChar(const GUI::Font& font, uInt8 chr,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::drawBitmap(uInt32* bitmap, uInt32 tx, uInt32 ty,
|
void FBSurfaceUI::drawBitmap(uInt32* bitmap, uInt32 tx, uInt32 ty,
|
||||||
uInt32 color, uInt32 h)
|
uInt32 color, uInt32 h)
|
||||||
{
|
{
|
||||||
uInt32* buffer = (uInt32*) myTexture->pixels + ty * myPitch + tx;
|
uInt32* buffer = (uInt32*) myTexture->pixels + ty * myPitch + tx;
|
||||||
|
@ -161,7 +157,7 @@ void FBSurfaceGL::drawBitmap(uInt32* bitmap, uInt32 tx, uInt32 ty,
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::drawPixels(uInt32* data, uInt32 tx, uInt32 ty, uInt32 numpixels)
|
void FBSurfaceUI::drawPixels(uInt32* data, uInt32 tx, uInt32 ty, uInt32 numpixels)
|
||||||
{
|
{
|
||||||
uInt32* buffer = (uInt32*) myTexture->pixels + ty * myPitch + tx;
|
uInt32* buffer = (uInt32*) myTexture->pixels + ty * myPitch + tx;
|
||||||
|
|
||||||
|
@ -170,9 +166,9 @@ void FBSurfaceGL::drawPixels(uInt32* data, uInt32 tx, uInt32 ty, uInt32 numpixel
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::drawSurface(const FBSurface* surface, uInt32 tx, uInt32 ty)
|
void FBSurfaceUI::drawSurface(const FBSurface* surface, uInt32 tx, uInt32 ty)
|
||||||
{
|
{
|
||||||
const FBSurfaceGL* s = (const FBSurfaceGL*) surface;
|
const FBSurfaceUI* s = (const FBSurfaceUI*) surface;
|
||||||
|
|
||||||
SDL_Rect dstrect;
|
SDL_Rect dstrect;
|
||||||
dstrect.x = tx;
|
dstrect.x = tx;
|
||||||
|
@ -187,7 +183,7 @@ void FBSurfaceGL::drawSurface(const FBSurface* surface, uInt32 tx, uInt32 ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
|
void FBSurfaceUI::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
|
||||||
{
|
{
|
||||||
// OpenGL mode doesn't make use of dirty rectangles
|
// OpenGL mode doesn't make use of dirty rectangles
|
||||||
// It's faster to just update the entire surface
|
// It's faster to just update the entire surface
|
||||||
|
@ -195,14 +191,14 @@ void FBSurfaceGL::addDirtyRect(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::getPos(uInt32& x, uInt32& y) const
|
void FBSurfaceUI::getPos(uInt32& x, uInt32& y) const
|
||||||
{
|
{
|
||||||
x = myImageX;
|
x = myImageX;
|
||||||
y = myImageY;
|
y = myImageY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::setPos(uInt32 x, uInt32 y)
|
void FBSurfaceUI::setPos(uInt32 x, uInt32 y)
|
||||||
{
|
{
|
||||||
if(myImageX != x || myImageY != y)
|
if(myImageX != x || myImageY != y)
|
||||||
{
|
{
|
||||||
|
@ -213,7 +209,7 @@ void FBSurfaceGL::setPos(uInt32 x, uInt32 y)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::setWidth(uInt32 w)
|
void FBSurfaceUI::setWidth(uInt32 w)
|
||||||
{
|
{
|
||||||
// This method can't be used with 'scaled' surface (aka TIA surfaces)
|
// This method can't be used with 'scaled' surface (aka TIA surfaces)
|
||||||
// That shouldn't really matter, though, as all the UI stuff isn't scaled,
|
// That shouldn't really matter, though, as all the UI stuff isn't scaled,
|
||||||
|
@ -227,7 +223,7 @@ void FBSurfaceGL::setWidth(uInt32 w)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::setHeight(uInt32 h)
|
void FBSurfaceUI::setHeight(uInt32 h)
|
||||||
{
|
{
|
||||||
// This method can't be used with 'scaled' surface (aka TIA surfaces)
|
// This method can't be used with 'scaled' surface (aka TIA surfaces)
|
||||||
// That shouldn't really matter, though, as all the UI stuff isn't scaled,
|
// That shouldn't really matter, though, as all the UI stuff isn't scaled,
|
||||||
|
@ -241,14 +237,14 @@ void FBSurfaceGL::setHeight(uInt32 h)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::translateCoords(Int32& x, Int32& y) const
|
void FBSurfaceUI::translateCoords(Int32& x, Int32& y) const
|
||||||
{
|
{
|
||||||
x -= myImageX;
|
x -= myImageX;
|
||||||
y -= myImageY;
|
y -= myImageY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::update()
|
void FBSurfaceUI::update()
|
||||||
{
|
{
|
||||||
if(mySurfaceIsDirty)
|
if(mySurfaceIsDirty)
|
||||||
{
|
{
|
||||||
|
@ -287,7 +283,7 @@ void FBSurfaceGL::update()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::free()
|
void FBSurfaceUI::free()
|
||||||
{
|
{
|
||||||
myGL.DeleteTextures(1, &myTexID);
|
myGL.DeleteTextures(1, &myTexID);
|
||||||
if(myFB.myVBOAvailable)
|
if(myFB.myVBOAvailable)
|
||||||
|
@ -295,12 +291,12 @@ void FBSurfaceGL::free()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::reload()
|
void FBSurfaceUI::reload()
|
||||||
{
|
{
|
||||||
// This does a 'soft' reset of the surface
|
// This does a 'soft' reset of the surface
|
||||||
// It seems that on some system (notably, OSX), creating a new SDL window
|
// It seems that on some system (notably, OSX), creating a new SDL window
|
||||||
// destroys the GL context, requiring a reload of all textures
|
// destroys the GL context, requiring a reload of all textures
|
||||||
// However, destroying the entire FBSurfaceGL object is wasteful, since
|
// However, destroying the entire FBSurfaceUI object is wasteful, since
|
||||||
// it will also regenerate SDL software surfaces (which are not required
|
// it will also regenerate SDL software surfaces (which are not required
|
||||||
// to be regenerated)
|
// to be regenerated)
|
||||||
// Basically, all that needs to be done is to re-call glTexImage2D with a
|
// Basically, all that needs to be done is to re-call glTexImage2D with a
|
||||||
|
@ -331,7 +327,7 @@ void FBSurfaceGL::reload()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FBSurfaceGL::updateCoords()
|
void FBSurfaceUI::updateCoords()
|
||||||
{
|
{
|
||||||
// Vertex coordinates for texture
|
// Vertex coordinates for texture
|
||||||
// Upper left (x,y)
|
// Upper left (x,y)
|
||||||
|
@ -368,5 +364,3 @@ void FBSurfaceGL::updateCoords()
|
||||||
myGL.BufferData(GL_ARRAY_BUFFER, 16*sizeof(GLfloat), myCoord, GL_STATIC_DRAW);
|
myGL.BufferData(GL_ARRAY_BUFFER, 16*sizeof(GLfloat), myCoord, GL_STATIC_DRAW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
|
@ -17,14 +17,11 @@
|
||||||
// $Id$
|
// $Id$
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FB_SURFACE_GL_HXX
|
#ifndef FB_SURFACE_UI_HXX
|
||||||
#define FB_SURFACE_GL_HXX
|
#define FB_SURFACE_UI_HXX
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBufferSDL2.hxx"
|
||||||
#include "FrameBufferGL.hxx"
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A surface suitable for OpenGL rendering mode, used for various UI dialogs.
|
A surface suitable for OpenGL rendering mode, used for various UI dialogs.
|
||||||
|
@ -32,13 +29,13 @@
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
*/
|
*/
|
||||||
class FBSurfaceGL : public FBSurface
|
class FBSurfaceUI : public FBSurface
|
||||||
{
|
{
|
||||||
friend class FrameBufferGL;
|
friend class FrameBufferSDL2;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FBSurfaceGL(FrameBufferGL& buffer, uInt32 width, uInt32 height);
|
FBSurfaceUI(FrameBufferSDL2& buffer, uInt32 width, uInt32 height);
|
||||||
virtual ~FBSurfaceGL();
|
virtual ~FBSurfaceUI();
|
||||||
|
|
||||||
// Normal surfaces need all drawing primitives
|
// Normal surfaces need all drawing primitives
|
||||||
void hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color);
|
void hLine(uInt32 x, uInt32 y, uInt32 x2, uInt32 color);
|
||||||
|
@ -64,8 +61,8 @@ class FBSurfaceGL : public FBSurface
|
||||||
void updateCoords();
|
void updateCoords();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FrameBufferGL& myFB;
|
FrameBufferSDL2& myFB;
|
||||||
const FrameBufferGL::GLpointers& myGL;
|
const FrameBufferSDL2::GLpointers& myGL;
|
||||||
SDL_Surface* myTexture;
|
SDL_Surface* myTexture;
|
||||||
|
|
||||||
GLuint myTexID, myVBOID;
|
GLuint myTexID, myVBOID;
|
||||||
|
@ -79,6 +76,4 @@ class FBSurfaceGL : public FBSurface
|
||||||
uInt32 myPitch;
|
uInt32 myPitch;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -17,8 +17,6 @@
|
||||||
// $Id$
|
// $Id$
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <SDL_syswm.h>
|
#include <SDL_syswm.h>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
@ -33,19 +31,26 @@
|
||||||
#include "Settings.hxx"
|
#include "Settings.hxx"
|
||||||
#include "TIA.hxx"
|
#include "TIA.hxx"
|
||||||
|
|
||||||
#include "FBSurfaceGL.hxx"
|
#include "FBSurfaceUI.hxx"
|
||||||
#include "FBSurfaceTIA.hxx"
|
#include "FBSurfaceTIA.hxx"
|
||||||
#include "FrameBufferGL.hxx"
|
#include "FrameBufferSDL2.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBufferGL::FrameBufferGL(OSystem* osystem)
|
FrameBufferSDL2::FrameBufferSDL2(OSystem* osystem)
|
||||||
: FrameBuffer(osystem),
|
: FrameBuffer(osystem),
|
||||||
myFilterType(kNormal),
|
myFilterType(kNormal),
|
||||||
|
myScreen(0),
|
||||||
|
mySDLFlags(0),
|
||||||
myTiaSurface(NULL),
|
myTiaSurface(NULL),
|
||||||
myDirtyFlag(true)
|
myDirtyFlag(true)
|
||||||
{
|
{
|
||||||
|
// Added from MediaFactory /////////////////////////
|
||||||
|
const string& gl_lib = osystem->settings().getString("gl_lib");
|
||||||
|
loadLibrary(gl_lib);
|
||||||
|
////////////////////////////////////////////////////
|
||||||
|
|
||||||
// We need a pixel format for palette value calculations
|
// We need a pixel format for palette value calculations
|
||||||
// It's done this way (vs directly accessing a FBSurfaceGL object)
|
// It's done this way (vs directly accessing a FBSurfaceUI object)
|
||||||
// since the structure may be needed before any FBSurface's have
|
// since the structure may be needed before any FBSurface's have
|
||||||
// been created
|
// been created
|
||||||
// Note: alpha disabled for now, since it's not used
|
// Note: alpha disabled for now, since it's not used
|
||||||
|
@ -57,14 +62,14 @@ FrameBufferGL::FrameBufferGL(OSystem* osystem)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBufferGL::~FrameBufferGL()
|
FrameBufferSDL2::~FrameBufferSDL2()
|
||||||
{
|
{
|
||||||
// We're taking responsibility for this surface
|
// We're taking responsibility for this surface
|
||||||
delete myTiaSurface;
|
delete myTiaSurface;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool FrameBufferGL::loadLibrary(const string& library)
|
bool FrameBufferSDL2::loadLibrary(const string& library)
|
||||||
{
|
{
|
||||||
if(myLibraryLoaded)
|
if(myLibraryLoaded)
|
||||||
return true;
|
return true;
|
||||||
|
@ -80,7 +85,7 @@ bool FrameBufferGL::loadLibrary(const string& library)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool FrameBufferGL::loadFuncs(GLFunctionality functionality)
|
bool FrameBufferSDL2::loadFuncs(GLFunctionality functionality)
|
||||||
{
|
{
|
||||||
#define OGL_INIT(NAME,RET,FUNC,PARAMS) \
|
#define OGL_INIT(NAME,RET,FUNC,PARAMS) \
|
||||||
p_gl.NAME = (RET(APIENTRY*)PARAMS) SDL_GL_GetProcAddress(#FUNC); if(!p_gl.NAME) return false
|
p_gl.NAME = (RET(APIENTRY*)PARAMS) SDL_GL_GetProcAddress(#FUNC); if(!p_gl.NAME) return false
|
||||||
|
@ -139,9 +144,23 @@ bool FrameBufferGL::loadFuncs(GLFunctionality functionality)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool FrameBufferGL::initSubsystem(VideoMode& mode)
|
bool FrameBufferSDL2::initSubsystem(VideoMode& mode, bool full)
|
||||||
{
|
{
|
||||||
|
// Now (re)initialize the SDL video system
|
||||||
|
// These things only have to be done one per FrameBuffer creation
|
||||||
|
if(SDL_WasInit(SDL_INIT_VIDEO) == 0)
|
||||||
|
{
|
||||||
|
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
|
||||||
|
{
|
||||||
|
ostringstream buf;
|
||||||
|
buf << "ERROR: Couldn't initialize SDL: " << SDL_GetError() << endl;
|
||||||
|
myOSystem->logMessage(buf.str(), 0);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
mySDLFlags |= SDL_OPENGL;
|
mySDLFlags |= SDL_OPENGL;
|
||||||
|
setHint(kFullScreen, full);
|
||||||
|
|
||||||
// Set up the OpenGL attributes
|
// Set up the OpenGL attributes
|
||||||
myDepth = SDL_GetVideoInfo()->vfmt->BitsPerPixel;
|
myDepth = SDL_GetVideoInfo()->vfmt->BitsPerPixel;
|
||||||
|
@ -174,7 +193,7 @@ bool FrameBufferGL::initSubsystem(VideoMode& mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
string FrameBufferGL::about() const
|
string FrameBufferSDL2::about() const
|
||||||
{
|
{
|
||||||
ostringstream out;
|
ostringstream out;
|
||||||
out << "Video rendering: OpenGL mode" << endl
|
out << "Video rendering: OpenGL mode" << endl
|
||||||
|
@ -190,7 +209,7 @@ string FrameBufferGL::about() const
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool FrameBufferGL::setVidMode(VideoMode& mode)
|
bool FrameBufferSDL2::setVidMode(VideoMode& mode)
|
||||||
{
|
{
|
||||||
bool inTIAMode =
|
bool inTIAMode =
|
||||||
myOSystem->eventHandler().state() != EventHandler::S_LAUNCHER &&
|
myOSystem->eventHandler().state() != EventHandler::S_LAUNCHER &&
|
||||||
|
@ -329,7 +348,23 @@ bool FrameBufferGL::setVidMode(VideoMode& mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::invalidate()
|
void FrameBufferSDL2::setHint(FBHint hint, bool enabled)
|
||||||
|
{
|
||||||
|
int flag = 0;
|
||||||
|
switch(hint)
|
||||||
|
{
|
||||||
|
case kFullScreen:
|
||||||
|
flag = SDL_FULLSCREEN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(enabled)
|
||||||
|
mySDLFlags |= flag;
|
||||||
|
else
|
||||||
|
mySDLFlags &= ~flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBufferSDL2::invalidate()
|
||||||
{
|
{
|
||||||
p_gl.Clear(GL_COLOR_BUFFER_BIT);
|
p_gl.Clear(GL_COLOR_BUFFER_BIT);
|
||||||
if(myTiaSurface)
|
if(myTiaSurface)
|
||||||
|
@ -337,14 +372,103 @@ void FrameBufferGL::invalidate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::drawTIA(bool fullRedraw)
|
void FrameBufferSDL2::showCursor(bool show)
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(show ? SDL_ENABLE : SDL_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBufferSDL2::grabMouse(bool grab)
|
||||||
|
{
|
||||||
|
SDL_WM_GrabInput(grab ? SDL_GRAB_ON : SDL_GRAB_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
bool FrameBufferSDL2::fullScreen() const
|
||||||
|
{
|
||||||
|
#ifdef WINDOWED_SUPPORT
|
||||||
|
return mySDLFlags & SDL_FULLSCREEN;
|
||||||
|
#else
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBufferSDL2::setWindowTitle(const string& title)
|
||||||
|
{
|
||||||
|
SDL_WM_SetCaption(title.c_str(), "stella");
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBufferSDL2::setWindowIcon()
|
||||||
|
{
|
||||||
|
#if !defined(BSPF_MAC_OSX) && !defined(BSPF_UNIX)
|
||||||
|
#include "stella.xpm" // The Stella icon
|
||||||
|
|
||||||
|
// Set the window icon
|
||||||
|
uInt32 w, h, ncols, nbytes;
|
||||||
|
uInt32 rgba[256], icon[32 * 32];
|
||||||
|
uInt8 mask[32][4];
|
||||||
|
|
||||||
|
sscanf(stella_icon[0], "%u %u %u %u", &w, &h, &ncols, &nbytes);
|
||||||
|
if((w != 32) || (h != 32) || (ncols > 255) || (nbytes > 1))
|
||||||
|
{
|
||||||
|
myOSystem->logMessage("ERROR: Couldn't load the application icon.", 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(uInt32 i = 0; i < ncols; i++)
|
||||||
|
{
|
||||||
|
unsigned char code;
|
||||||
|
char color[32];
|
||||||
|
uInt32 col;
|
||||||
|
|
||||||
|
sscanf(stella_icon[1 + i], "%c c %s", &code, color);
|
||||||
|
if(!strcmp(color, "None"))
|
||||||
|
col = 0x00000000;
|
||||||
|
else if(!strcmp(color, "black"))
|
||||||
|
col = 0xFF000000;
|
||||||
|
else if (color[0] == '#')
|
||||||
|
{
|
||||||
|
sscanf(color + 1, "%06x", &col);
|
||||||
|
col |= 0xFF000000;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myOSystem->logMessage("ERROR: Couldn't load the application icon.", 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rgba[code] = col;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(mask, 0, sizeof(mask));
|
||||||
|
for(h = 0; h < 32; h++)
|
||||||
|
{
|
||||||
|
const char* line = stella_icon[1 + ncols + h];
|
||||||
|
for(w = 0; w < 32; w++)
|
||||||
|
{
|
||||||
|
icon[w + 32 * h] = rgba[(int)line[w]];
|
||||||
|
if(rgba[(int)line[w]] & 0xFF000000)
|
||||||
|
mask[h][w >> 3] |= 1 << (7 - (w & 0x07));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Surface *surface = SDL_CreateRGBSurfaceFrom(icon, 32, 32, 32,
|
||||||
|
32 * 4, 0xFF0000, 0x00FF00, 0x0000FF, 0xFF000000);
|
||||||
|
SDL_WM_SetIcon(surface, (unsigned char *) mask);
|
||||||
|
SDL_FreeSurface(surface);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
void FrameBufferSDL2::drawTIA(bool fullRedraw)
|
||||||
{
|
{
|
||||||
// The TIA surface takes all responsibility for drawing
|
// The TIA surface takes all responsibility for drawing
|
||||||
myTiaSurface->update();
|
myTiaSurface->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::postFrameUpdate()
|
void FrameBufferSDL2::postFrameUpdate()
|
||||||
{
|
{
|
||||||
if(myDirtyFlag)
|
if(myDirtyFlag)
|
||||||
{
|
{
|
||||||
|
@ -355,7 +479,7 @@ void FrameBufferGL::postFrameUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::enablePhosphor(bool enable, int blend)
|
void FrameBufferSDL2::enablePhosphor(bool enable, int blend)
|
||||||
{
|
{
|
||||||
if(myTiaSurface)
|
if(myTiaSurface)
|
||||||
{
|
{
|
||||||
|
@ -367,7 +491,7 @@ void FrameBufferGL::enablePhosphor(bool enable, int blend)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::enableNTSC(bool enable)
|
void FrameBufferSDL2::enableNTSC(bool enable)
|
||||||
{
|
{
|
||||||
if(myTiaSurface)
|
if(myTiaSurface)
|
||||||
{
|
{
|
||||||
|
@ -384,7 +508,7 @@ void FrameBufferGL::enableNTSC(bool enable)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
uInt32 FrameBufferGL::enableScanlines(int relative, int absolute)
|
uInt32 FrameBufferSDL2::enableScanlines(int relative, int absolute)
|
||||||
{
|
{
|
||||||
int intensity = myTiaSurface->myScanlineIntensityI;
|
int intensity = myTiaSurface->myScanlineIntensityI;
|
||||||
if(myTiaSurface)
|
if(myTiaSurface)
|
||||||
|
@ -401,7 +525,7 @@ uInt32 FrameBufferGL::enableScanlines(int relative, int absolute)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::enableScanlineInterpolation(bool enable)
|
void FrameBufferSDL2::enableScanlineInterpolation(bool enable)
|
||||||
{
|
{
|
||||||
if(myTiaSurface)
|
if(myTiaSurface)
|
||||||
{
|
{
|
||||||
|
@ -411,23 +535,23 @@ void FrameBufferGL::enableScanlineInterpolation(bool enable)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::setTIAPalette(const uInt32* palette)
|
void FrameBufferSDL2::setTIAPalette(const uInt32* palette)
|
||||||
{
|
{
|
||||||
FrameBuffer::setTIAPalette(palette);
|
FrameBuffer::setTIAPalette(palette);
|
||||||
myTiaSurface->setTIAPalette(palette);
|
myTiaSurface->setTIAPalette(palette);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FBSurface* FrameBufferGL::createSurface(int w, int h, bool isBase) const
|
FBSurface* FrameBufferSDL2::createSurface(int w, int h, bool isBase) const
|
||||||
{
|
{
|
||||||
// Ignore 'isBase' argument; all GL surfaces are separate
|
// Ignore 'isBase' argument; all GL surfaces are separate
|
||||||
// Also, this method will only be called for use in external dialogs.
|
// Also, this method will only be called for use in external dialogs.
|
||||||
// and never used for TIA surfaces
|
// and never used for TIA surfaces
|
||||||
return new FBSurfaceGL((FrameBufferGL&)*this, w, h);
|
return new FBSurfaceUI((FrameBufferSDL2&)*this, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void FrameBufferGL::scanline(uInt32 row, uInt8* data) const
|
void FrameBufferSDL2::scanline(uInt32 row, uInt8* data) const
|
||||||
{
|
{
|
||||||
// Invert the row, since OpenGL rows start at the bottom
|
// Invert the row, since OpenGL rows start at the bottom
|
||||||
// of the framebuffer
|
// of the framebuffer
|
||||||
|
@ -439,7 +563,7 @@ void FrameBufferGL::scanline(uInt32 row, uInt8* data) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
string FrameBufferGL::effectsInfo() const
|
string FrameBufferSDL2::effectsInfo() const
|
||||||
{
|
{
|
||||||
ostringstream buf;
|
ostringstream buf;
|
||||||
switch(myFilterType)
|
switch(myFilterType)
|
||||||
|
@ -465,9 +589,7 @@ string FrameBufferGL::effectsInfo() const
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool FrameBufferGL::myLibraryLoaded = false;
|
bool FrameBufferSDL2::myLibraryLoaded = false;
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool FrameBufferGL::myVBOAvailable = false;
|
bool FrameBufferSDL2::myVBOAvailable = false;
|
||||||
|
|
||||||
#endif // DISPLAY_OPENGL
|
|
|
@ -17,17 +17,15 @@
|
||||||
// $Id$
|
// $Id$
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef FRAMEBUFFER_GL_HXX
|
#ifndef FRAMEBUFFER_SDL2_HXX
|
||||||
#define FRAMEBUFFER_GL_HXX
|
#define FRAMEBUFFER_SDL2_HXX
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#include <SDL_opengl.h>
|
#include <SDL_opengl.h>
|
||||||
#include <SDL_syswm.h>
|
#include <SDL_syswm.h>
|
||||||
|
|
||||||
class OSystem;
|
class OSystem;
|
||||||
class FBSurfaceGL;
|
class FBSurfaceUI;
|
||||||
class FBSurfaceTIA;
|
class FBSurfaceTIA;
|
||||||
class TIA;
|
class TIA;
|
||||||
|
|
||||||
|
@ -35,31 +33,32 @@ class TIA;
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBuffer.hxx"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This class implements an SDL OpenGL framebuffer.
|
This class implements a standard SDL2 2D, hardware accelerated framebuffer.
|
||||||
|
Behind the scenes, it may be using Direct3D, OpenGL(ES), etc.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id$
|
@version $Id$
|
||||||
*/
|
*/
|
||||||
class FrameBufferGL : public FrameBuffer
|
class FrameBufferSDL2 : public FrameBuffer
|
||||||
{
|
{
|
||||||
friend class FBSurfaceGL;
|
friend class FBSurfaceUI;
|
||||||
friend class FBSurfaceTIA;
|
friend class FBSurfaceTIA;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
Creates a new OpenGL framebuffer
|
Creates a new OpenGL framebuffer
|
||||||
*/
|
*/
|
||||||
FrameBufferGL(OSystem* osystem);
|
FrameBufferSDL2(OSystem* osystem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Destructor
|
Destructor
|
||||||
*/
|
*/
|
||||||
virtual ~FrameBufferGL();
|
virtual ~FrameBufferSDL2();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check if OpenGL is available on this system, and then opens it.
|
Check if OpenGL is available on this system, and then opens it.
|
||||||
If any errors occur, we shouldn't attempt to instantiate a
|
If any errors occur, we shouldn't attempt to instantiate a
|
||||||
FrameBufferGL object.
|
FrameBufferSDL2 object.
|
||||||
|
|
||||||
@param library The filename of the OpenGL library
|
@param library The filename of the OpenGL library
|
||||||
*/
|
*/
|
||||||
|
@ -68,6 +67,27 @@ class FrameBufferGL : public FrameBuffer
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// The following are derived from public methods in FrameBuffer.hxx
|
// The following are derived from public methods in FrameBuffer.hxx
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
/**
|
||||||
|
Toggles the use of grabmouse (only has effect in emulation mode).
|
||||||
|
The method changes the 'grabmouse' setting and saves it.
|
||||||
|
*/
|
||||||
|
void toggleGrabMouse();
|
||||||
|
|
||||||
|
/**
|
||||||
|
Shows or hides the cursor based on the given boolean value.
|
||||||
|
*/
|
||||||
|
void showCursor(bool show);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Answers if the display is currently in fullscreen mode.
|
||||||
|
*/
|
||||||
|
bool fullScreen() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set the title for the main window.
|
||||||
|
*/
|
||||||
|
void setWindowTitle(const string& title);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Enable/disable phosphor effect.
|
Enable/disable phosphor effect.
|
||||||
*/
|
*/
|
||||||
|
@ -134,10 +154,11 @@ class FrameBufferGL : public FrameBuffer
|
||||||
with the given video mode. Normally, it will also call setVidMode().
|
with the given video mode. Normally, it will also call setVidMode().
|
||||||
|
|
||||||
@param mode The video mode to use
|
@param mode The video mode to use
|
||||||
|
@param full Whether this is a fullscreen or windowed mode
|
||||||
|
|
||||||
@return False on any errors, else true
|
@return False on any errors, else true
|
||||||
*/
|
*/
|
||||||
bool initSubsystem(VideoMode& mode);
|
bool initSubsystem(VideoMode& mode, bool full);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method is called to change to the given video mode. If the mode
|
This method is called to change to the given video mode. If the mode
|
||||||
|
@ -149,6 +170,15 @@ class FrameBufferGL : public FrameBuffer
|
||||||
*/
|
*/
|
||||||
bool setVidMode(VideoMode& mode);
|
bool setVidMode(VideoMode& mode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets a hint that the underlying renderer may use; it is also free
|
||||||
|
to ignore it completely.
|
||||||
|
|
||||||
|
@param hint The hint to set
|
||||||
|
@param enabled Whether the hint should be turned on or off
|
||||||
|
*/
|
||||||
|
void setHint(FBHint hint, bool enabled);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method is called to invalidate the contents of the entire
|
This method is called to invalidate the contents of the entire
|
||||||
framebuffer (ie, mark the current content as invalid, and erase it on
|
framebuffer (ie, mark the current content as invalid, and erase it on
|
||||||
|
@ -166,6 +196,16 @@ class FrameBufferGL : public FrameBuffer
|
||||||
*/
|
*/
|
||||||
FBSurface* createSurface(int w, int h, bool useBase = false) const;
|
FBSurface* createSurface(int w, int h, bool useBase = false) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Grabs or ungrabs the mouse based on the given boolean value.
|
||||||
|
*/
|
||||||
|
void grabMouse(bool grab);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set the icon for the main SDL window.
|
||||||
|
*/
|
||||||
|
void setWindowIcon();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method should be called anytime the TIA needs to be redrawn
|
This method should be called anytime the TIA needs to be redrawn
|
||||||
to the screen (full indicating that a full redraw is required).
|
to the screen (full indicating that a full redraw is required).
|
||||||
|
@ -217,6 +257,15 @@ class FrameBufferGL : public FrameBuffer
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// The SDL video buffer
|
||||||
|
SDL_Surface* myScreen;
|
||||||
|
|
||||||
|
// SDL initialization flags
|
||||||
|
// This is set by the base FrameBuffer class, and read by the derived classes
|
||||||
|
// If a FrameBuffer is successfully created, the derived classes must modify
|
||||||
|
// it to point to the actual flags used by the SDL_Surface
|
||||||
|
uInt32 mySDLFlags;
|
||||||
|
|
||||||
// The lower-most base surface (will always be a TIA surface,
|
// The lower-most base surface (will always be a TIA surface,
|
||||||
// since Dialog surfaces are allocated by the Dialog class directly).
|
// since Dialog surfaces are allocated by the Dialog class directly).
|
||||||
FBSurfaceTIA* myTiaSurface;
|
FBSurfaceTIA* myTiaSurface;
|
||||||
|
@ -280,6 +329,4 @@ class FrameBufferGL : public FrameBuffer
|
||||||
GLpointers p_gl;
|
GLpointers p_gl;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DISPLAY_OPENGL
|
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -30,10 +30,10 @@
|
||||||
#include "System.hxx"
|
#include "System.hxx"
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
#include "Console.hxx"
|
#include "Console.hxx"
|
||||||
#include "SoundSDL.hxx"
|
#include "SoundSDL2.hxx"
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
SoundSDL::SoundSDL(OSystem* osystem)
|
SoundSDL2::SoundSDL2(OSystem* osystem)
|
||||||
: Sound(osystem),
|
: Sound(osystem),
|
||||||
myIsEnabled(false),
|
myIsEnabled(false),
|
||||||
myIsInitializedFlag(false),
|
myIsInitializedFlag(false),
|
||||||
|
@ -43,7 +43,7 @@ SoundSDL::SoundSDL(OSystem* osystem)
|
||||||
myIsMuted(true),
|
myIsMuted(true),
|
||||||
myVolume(100)
|
myVolume(100)
|
||||||
{
|
{
|
||||||
myOSystem->logMessage("SoundSDL::SoundSDL started ...", 2);
|
myOSystem->logMessage("SoundSDL2::SoundSDL2 started ...", 2);
|
||||||
|
|
||||||
// The sound system is opened only once per program run, to eliminate
|
// The sound system is opened only once per program run, to eliminate
|
||||||
// issues with opening and closing it multiple times
|
// issues with opening and closing it multiple times
|
||||||
|
@ -87,11 +87,11 @@ SoundSDL::SoundSDL(OSystem* osystem)
|
||||||
myIsInitializedFlag = true;
|
myIsInitializedFlag = true;
|
||||||
SDL_PauseAudio(1);
|
SDL_PauseAudio(1);
|
||||||
|
|
||||||
myOSystem->logMessage("SoundSDL::SoundSDL initialized", 2);
|
myOSystem->logMessage("SoundSDL2::SoundSDL2 initialized", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
SoundSDL::~SoundSDL()
|
SoundSDL2::~SoundSDL2()
|
||||||
{
|
{
|
||||||
// Close the SDL audio system if it's initialized
|
// Close the SDL audio system if it's initialized
|
||||||
if(myIsInitializedFlag)
|
if(myIsInitializedFlag)
|
||||||
|
@ -100,22 +100,22 @@ SoundSDL::~SoundSDL()
|
||||||
myIsEnabled = myIsInitializedFlag = false;
|
myIsEnabled = myIsInitializedFlag = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
myOSystem->logMessage("SoundSDL destroyed", 2);
|
myOSystem->logMessage("SoundSDL2 destroyed", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::setEnabled(bool state)
|
void SoundSDL2::setEnabled(bool state)
|
||||||
{
|
{
|
||||||
myOSystem->settings().setValue("sound", state);
|
myOSystem->settings().setValue("sound", state);
|
||||||
|
|
||||||
myOSystem->logMessage(state ? "SoundSDL::setEnabled(true)" :
|
myOSystem->logMessage(state ? "SoundSDL2::setEnabled(true)" :
|
||||||
"SoundSDL::setEnabled(false)", 2);
|
"SoundSDL2::setEnabled(false)", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::open()
|
void SoundSDL2::open()
|
||||||
{
|
{
|
||||||
myOSystem->logMessage("SoundSDL::open started ...", 2);
|
myOSystem->logMessage("SoundSDL2::open started ...", 2);
|
||||||
myIsEnabled = false;
|
myIsEnabled = false;
|
||||||
mute(true);
|
mute(true);
|
||||||
if(!myIsInitializedFlag || !myOSystem->settings().getBool("sound"))
|
if(!myIsInitializedFlag || !myOSystem->settings().getBool("sound"))
|
||||||
|
@ -148,11 +148,11 @@ void SoundSDL::open()
|
||||||
myIsEnabled = true;
|
myIsEnabled = true;
|
||||||
mute(false);
|
mute(false);
|
||||||
|
|
||||||
myOSystem->logMessage("SoundSDL::open finished", 2);
|
myOSystem->logMessage("SoundSDL2::open finished", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::close()
|
void SoundSDL2::close()
|
||||||
{
|
{
|
||||||
if(myIsInitializedFlag)
|
if(myIsInitializedFlag)
|
||||||
{
|
{
|
||||||
|
@ -161,12 +161,12 @@ void SoundSDL::close()
|
||||||
myLastRegisterSetCycle = 0;
|
myLastRegisterSetCycle = 0;
|
||||||
myTIASound.reset();
|
myTIASound.reset();
|
||||||
myRegWriteQueue.clear();
|
myRegWriteQueue.clear();
|
||||||
myOSystem->logMessage("SoundSDL::close", 2);
|
myOSystem->logMessage("SoundSDL2::close", 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::mute(bool state)
|
void SoundSDL2::mute(bool state)
|
||||||
{
|
{
|
||||||
if(myIsInitializedFlag)
|
if(myIsInitializedFlag)
|
||||||
{
|
{
|
||||||
|
@ -176,7 +176,7 @@ void SoundSDL::mute(bool state)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::reset()
|
void SoundSDL2::reset()
|
||||||
{
|
{
|
||||||
if(myIsInitializedFlag)
|
if(myIsInitializedFlag)
|
||||||
{
|
{
|
||||||
|
@ -189,7 +189,7 @@ void SoundSDL::reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::setVolume(Int32 percent)
|
void SoundSDL2::setVolume(Int32 percent)
|
||||||
{
|
{
|
||||||
if(myIsInitializedFlag && (percent >= 0) && (percent <= 100))
|
if(myIsInitializedFlag && (percent >= 0) && (percent <= 100))
|
||||||
{
|
{
|
||||||
|
@ -202,7 +202,7 @@ void SoundSDL::setVolume(Int32 percent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::adjustVolume(Int8 direction)
|
void SoundSDL2::adjustVolume(Int8 direction)
|
||||||
{
|
{
|
||||||
ostringstream strval;
|
ostringstream strval;
|
||||||
string message;
|
string message;
|
||||||
|
@ -228,20 +228,20 @@ void SoundSDL::adjustVolume(Int8 direction)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::adjustCycleCounter(Int32 amount)
|
void SoundSDL2::adjustCycleCounter(Int32 amount)
|
||||||
{
|
{
|
||||||
myLastRegisterSetCycle += amount;
|
myLastRegisterSetCycle += amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::setChannels(uInt32 channels)
|
void SoundSDL2::setChannels(uInt32 channels)
|
||||||
{
|
{
|
||||||
if(channels == 1 || channels == 2)
|
if(channels == 1 || channels == 2)
|
||||||
myNumChannels = channels;
|
myNumChannels = channels;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::setFrameRate(float framerate)
|
void SoundSDL2::setFrameRate(float framerate)
|
||||||
{
|
{
|
||||||
// Recalculate since frame rate has changed
|
// Recalculate since frame rate has changed
|
||||||
// FIXME - should we clear out the queue or adjust the values in it?
|
// FIXME - should we clear out the queue or adjust the values in it?
|
||||||
|
@ -250,7 +250,7 @@ void SoundSDL::setFrameRate(float framerate)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::set(uInt16 addr, uInt8 value, Int32 cycle)
|
void SoundSDL2::set(uInt16 addr, uInt8 value, Int32 cycle)
|
||||||
{
|
{
|
||||||
SDL_LockAudio();
|
SDL_LockAudio();
|
||||||
|
|
||||||
|
@ -276,7 +276,7 @@ void SoundSDL::set(uInt16 addr, uInt8 value, Int32 cycle)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::processFragment(Int16* stream, uInt32 length)
|
void SoundSDL2::processFragment(Int16* stream, uInt32 length)
|
||||||
{
|
{
|
||||||
uInt32 channels = myHardwareSpec.channels;
|
uInt32 channels = myHardwareSpec.channels;
|
||||||
length = length / channels;
|
length = length / channels;
|
||||||
|
@ -357,9 +357,9 @@ void SoundSDL::processFragment(Int16* stream, uInt32 length)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::callback(void* udata, uInt8* stream, int len)
|
void SoundSDL2::callback(void* udata, uInt8* stream, int len)
|
||||||
{
|
{
|
||||||
SoundSDL* sound = (SoundSDL*)udata;
|
SoundSDL2* sound = (SoundSDL2*)udata;
|
||||||
if(sound->myIsEnabled)
|
if(sound->myIsEnabled)
|
||||||
{
|
{
|
||||||
// The callback is requesting 8-bit (unsigned) data, but the TIA sound
|
// The callback is requesting 8-bit (unsigned) data, but the TIA sound
|
||||||
|
@ -370,7 +370,7 @@ void SoundSDL::callback(void* udata, uInt8* stream, int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool SoundSDL::save(Serializer& out) const
|
bool SoundSDL2::save(Serializer& out) const
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -400,7 +400,7 @@ bool SoundSDL::save(Serializer& out) const
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
myOSystem->logMessage("ERROR: SoundSDL::save", 0);
|
myOSystem->logMessage("ERROR: SoundSDL2::save", 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -408,7 +408,7 @@ bool SoundSDL::save(Serializer& out) const
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool SoundSDL::load(Serializer& in)
|
bool SoundSDL2::load(Serializer& in)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -441,7 +441,7 @@ bool SoundSDL::load(Serializer& in)
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
myOSystem->logMessage("ERROR: SoundSDL::load", 0);
|
myOSystem->logMessage("ERROR: SoundSDL2::load", 0);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -449,7 +449,7 @@ bool SoundSDL::load(Serializer& in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
SoundSDL::RegWriteQueue::RegWriteQueue(uInt32 capacity)
|
SoundSDL2::RegWriteQueue::RegWriteQueue(uInt32 capacity)
|
||||||
: myCapacity(capacity),
|
: myCapacity(capacity),
|
||||||
myBuffer(0),
|
myBuffer(0),
|
||||||
mySize(0),
|
mySize(0),
|
||||||
|
@ -460,19 +460,19 @@ SoundSDL::RegWriteQueue::RegWriteQueue(uInt32 capacity)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
SoundSDL::RegWriteQueue::~RegWriteQueue()
|
SoundSDL2::RegWriteQueue::~RegWriteQueue()
|
||||||
{
|
{
|
||||||
delete[] myBuffer;
|
delete[] myBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::RegWriteQueue::clear()
|
void SoundSDL2::RegWriteQueue::clear()
|
||||||
{
|
{
|
||||||
myHead = myTail = mySize = 0;
|
myHead = myTail = mySize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::RegWriteQueue::dequeue()
|
void SoundSDL2::RegWriteQueue::dequeue()
|
||||||
{
|
{
|
||||||
if(mySize > 0)
|
if(mySize > 0)
|
||||||
{
|
{
|
||||||
|
@ -482,7 +482,7 @@ void SoundSDL::RegWriteQueue::dequeue()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
double SoundSDL::RegWriteQueue::duration()
|
double SoundSDL2::RegWriteQueue::duration()
|
||||||
{
|
{
|
||||||
double duration = 0.0;
|
double duration = 0.0;
|
||||||
for(uInt32 i = 0; i < mySize; ++i)
|
for(uInt32 i = 0; i < mySize; ++i)
|
||||||
|
@ -493,7 +493,7 @@ double SoundSDL::RegWriteQueue::duration()
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::RegWriteQueue::enqueue(const RegWrite& info)
|
void SoundSDL2::RegWriteQueue::enqueue(const RegWrite& info)
|
||||||
{
|
{
|
||||||
// If an attempt is made to enqueue more than the queue can hold then
|
// If an attempt is made to enqueue more than the queue can hold then
|
||||||
// we'll enlarge the queue's capacity.
|
// we'll enlarge the queue's capacity.
|
||||||
|
@ -506,20 +506,20 @@ void SoundSDL::RegWriteQueue::enqueue(const RegWrite& info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
SoundSDL::RegWrite& SoundSDL::RegWriteQueue::front()
|
SoundSDL2::RegWrite& SoundSDL2::RegWriteQueue::front()
|
||||||
{
|
{
|
||||||
assert(mySize != 0);
|
assert(mySize != 0);
|
||||||
return myBuffer[myHead];
|
return myBuffer[myHead];
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
uInt32 SoundSDL::RegWriteQueue::size() const
|
uInt32 SoundSDL2::RegWriteQueue::size() const
|
||||||
{
|
{
|
||||||
return mySize;
|
return mySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void SoundSDL::RegWriteQueue::grow()
|
void SoundSDL2::RegWriteQueue::grow()
|
||||||
{
|
{
|
||||||
RegWrite* buffer = new RegWrite[myCapacity * 2];
|
RegWrite* buffer = new RegWrite[myCapacity * 2];
|
||||||
for(uInt32 i = 0; i < mySize; ++i)
|
for(uInt32 i = 0; i < mySize; ++i)
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
#ifdef SOUND_SUPPORT
|
#ifdef SOUND_SUPPORT
|
||||||
|
|
||||||
#ifndef SOUND_SDL_HXX
|
#ifndef SOUND_SDL2_HXX
|
||||||
#define SOUND_SDL_HXX
|
#define SOUND_SDL2_HXX
|
||||||
|
|
||||||
class OSystem;
|
class OSystem;
|
||||||
|
|
||||||
|
@ -36,19 +36,19 @@ class OSystem;
|
||||||
@author Stephen Anthony and Bradford W. Mott
|
@author Stephen Anthony and Bradford W. Mott
|
||||||
@version $Id$
|
@version $Id$
|
||||||
*/
|
*/
|
||||||
class SoundSDL : public Sound
|
class SoundSDL2 : public Sound
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
Create a new sound object. The init method must be invoked before
|
Create a new sound object. The init method must be invoked before
|
||||||
using the object.
|
using the object.
|
||||||
*/
|
*/
|
||||||
SoundSDL(OSystem* osystem);
|
SoundSDL2(OSystem* osystem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Destructor
|
Destructor
|
||||||
*/
|
*/
|
||||||
virtual ~SoundSDL();
|
virtual ~SoundSDL2();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
|
@ -3,10 +3,10 @@ MODULE := src/common
|
||||||
MODULE_OBJS := \
|
MODULE_OBJS := \
|
||||||
src/common/mainSDL.o \
|
src/common/mainSDL.o \
|
||||||
src/common/Base.o \
|
src/common/Base.o \
|
||||||
src/common/SoundSDL.o \
|
src/common/FrameBufferSDL2.o \
|
||||||
src/common/FrameBufferGL.o \
|
src/common/FBSurfaceUI.o \
|
||||||
src/common/FBSurfaceGL.o \
|
|
||||||
src/common/FBSurfaceTIA.o \
|
src/common/FBSurfaceTIA.o \
|
||||||
|
src/common/SoundSDL2.o \
|
||||||
src/common/FSNodeZIP.o \
|
src/common/FSNodeZIP.o \
|
||||||
src/common/PNGLibrary.o \
|
src/common/PNGLibrary.o \
|
||||||
src/common/MouseControl.o \
|
src/common/MouseControl.o \
|
||||||
|
|
|
@ -42,8 +42,6 @@
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
FrameBuffer::FrameBuffer(OSystem* osystem)
|
FrameBuffer::FrameBuffer(OSystem* osystem)
|
||||||
: myOSystem(osystem),
|
: myOSystem(osystem),
|
||||||
myScreen(0),
|
|
||||||
mySDLFlags(0),
|
|
||||||
myRedrawEntireFrame(true),
|
myRedrawEntireFrame(true),
|
||||||
myUsePhosphor(false),
|
myUsePhosphor(false),
|
||||||
myPhosphorBlend(77),
|
myPhosphorBlend(77),
|
||||||
|
@ -72,19 +70,6 @@ FrameBuffer::~FrameBuffer(void)
|
||||||
FBInitStatus FrameBuffer::initialize(const string& title,
|
FBInitStatus FrameBuffer::initialize(const string& title,
|
||||||
uInt32 width, uInt32 height)
|
uInt32 width, uInt32 height)
|
||||||
{
|
{
|
||||||
ostringstream buf;
|
|
||||||
|
|
||||||
// Now (re)initialize the SDL video system
|
|
||||||
// These things only have to be done one per FrameBuffer creation
|
|
||||||
if(SDL_WasInit(SDL_INIT_VIDEO) == 0)
|
|
||||||
{
|
|
||||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
|
|
||||||
{
|
|
||||||
buf << "ERROR: Couldn't initialize SDL: " << SDL_GetError() << endl;
|
|
||||||
myOSystem->logMessage(buf.str(), 0);
|
|
||||||
return kFailComplete;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
myInitializedCount++;
|
myInitializedCount++;
|
||||||
|
|
||||||
// A 'windowed' system is defined as one where the window size can be
|
// A 'windowed' system is defined as one where the window size can be
|
||||||
|
@ -97,7 +82,7 @@ FBInitStatus FrameBuffer::initialize(const string& title,
|
||||||
// If the WINDOWED_SUPPORT macro is defined, we treat the system as the
|
// If the WINDOWED_SUPPORT macro is defined, we treat the system as the
|
||||||
// former type; if not, as the latter type
|
// former type; if not, as the latter type
|
||||||
|
|
||||||
uInt32 flags = mySDLFlags;
|
bool useFullscreen = false;
|
||||||
#ifdef WINDOWED_SUPPORT
|
#ifdef WINDOWED_SUPPORT
|
||||||
// We assume that a desktop size of at least 640x480 means that we're
|
// We assume that a desktop size of at least 640x480 means that we're
|
||||||
// running on a 'large' system, and the window size requirements can
|
// running on a 'large' system, and the window size requirements can
|
||||||
|
@ -112,10 +97,10 @@ FBInitStatus FrameBuffer::initialize(const string& title,
|
||||||
if(myOSystem->desktopWidth() < width || myOSystem->desktopHeight() < height)
|
if(myOSystem->desktopWidth() < width || myOSystem->desktopHeight() < height)
|
||||||
return kFailTooLarge;
|
return kFailTooLarge;
|
||||||
|
|
||||||
flags |= SDL_FULLSCREEN;
|
useFullscreen = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
flags &= ~SDL_FULLSCREEN;
|
useFullscreen = false;
|
||||||
#else
|
#else
|
||||||
// Make sure this mode is even possible
|
// Make sure this mode is even possible
|
||||||
// We only really need to worry about it in non-windowed environments,
|
// We only really need to worry about it in non-windowed environments,
|
||||||
|
@ -124,9 +109,6 @@ FBInitStatus FrameBuffer::initialize(const string& title,
|
||||||
return kFailTooLarge;
|
return kFailTooLarge;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Only update the actual flags if no errors were detected
|
|
||||||
mySDLFlags = flags;
|
|
||||||
|
|
||||||
// Set the available video modes for this framebuffer
|
// Set the available video modes for this framebuffer
|
||||||
setAvailableVidModes(width, height);
|
setAvailableVidModes(width, height);
|
||||||
|
|
||||||
|
@ -138,7 +120,7 @@ FBInitStatus FrameBuffer::initialize(const string& title,
|
||||||
setWindowTitle(title);
|
setWindowTitle(title);
|
||||||
if(myInitializedCount == 1) setWindowIcon();
|
if(myInitializedCount == 1) setWindowIcon();
|
||||||
|
|
||||||
if(initSubsystem(mode))
|
if(initSubsystem(mode, useFullscreen))
|
||||||
{
|
{
|
||||||
centerAppWindow(mode);
|
centerAppWindow(mode);
|
||||||
|
|
||||||
|
@ -646,18 +628,6 @@ void FrameBuffer::setTIAPalette(const uInt32* palette)
|
||||||
Uint8 b = palette[i] & 0xff;
|
Uint8 b = palette[i] & 0xff;
|
||||||
|
|
||||||
myDefPalette[i] = mapRGB(r, g, b);
|
myDefPalette[i] = mapRGB(r, g, b);
|
||||||
if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
|
|
||||||
{
|
|
||||||
myDefPalette24[i][0] = b;
|
|
||||||
myDefPalette24[i][1] = g;
|
|
||||||
myDefPalette24[i][2] = r;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myDefPalette24[i][0] = r;
|
|
||||||
myDefPalette24[i][1] = g;
|
|
||||||
myDefPalette24[i][2] = b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set palette for phosphor effect
|
// Set palette for phosphor effect
|
||||||
|
@ -694,18 +664,6 @@ void FrameBuffer::setUIPalette(const uInt32* palette)
|
||||||
Uint8 b = palette[i] & 0xff;
|
Uint8 b = palette[i] & 0xff;
|
||||||
|
|
||||||
myDefPalette[j] = mapRGB(r, g, b);
|
myDefPalette[j] = mapRGB(r, g, b);
|
||||||
if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
|
|
||||||
{
|
|
||||||
myDefPalette24[j][0] = b;
|
|
||||||
myDefPalette24[j][1] = g;
|
|
||||||
myDefPalette24[j][2] = r;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myDefPalette24[j][0] = r;
|
|
||||||
myDefPalette24[j][1] = g;
|
|
||||||
myDefPalette24[j][2] = b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -730,10 +688,8 @@ void FrameBuffer::setFullscreen(bool enable)
|
||||||
{
|
{
|
||||||
#ifdef WINDOWED_SUPPORT
|
#ifdef WINDOWED_SUPPORT
|
||||||
// '-1' means fullscreen mode is completely disabled
|
// '-1' means fullscreen mode is completely disabled
|
||||||
if(enable && myOSystem->settings().getString("fullscreen") != "-1" )
|
bool full = enable && myOSystem->settings().getString("fullscreen") != "-1";
|
||||||
mySDLFlags |= SDL_FULLSCREEN;
|
setHint(kFullScreen, full);
|
||||||
else
|
|
||||||
mySDLFlags &= ~SDL_FULLSCREEN;
|
|
||||||
|
|
||||||
// Do a dummy call to getSavedVidMode to set up the modelists
|
// Do a dummy call to getSavedVidMode to set up the modelists
|
||||||
// and have it point to the correct 'current' mode
|
// and have it point to the correct 'current' mode
|
||||||
|
@ -830,95 +786,6 @@ void FrameBuffer::toggleGrabMouse()
|
||||||
setCursorState();
|
setCursorState();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void FrameBuffer::showCursor(bool show)
|
|
||||||
{
|
|
||||||
SDL_ShowCursor(show ? SDL_ENABLE : SDL_DISABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void FrameBuffer::grabMouse(bool grab)
|
|
||||||
{
|
|
||||||
SDL_WM_GrabInput(grab ? SDL_GRAB_ON : SDL_GRAB_OFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
bool FrameBuffer::fullScreen() const
|
|
||||||
{
|
|
||||||
#ifdef WINDOWED_SUPPORT
|
|
||||||
return mySDLFlags & SDL_FULLSCREEN;
|
|
||||||
#else
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void FrameBuffer::setWindowTitle(const string& title)
|
|
||||||
{
|
|
||||||
SDL_WM_SetCaption(title.c_str(), "stella");
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
void FrameBuffer::setWindowIcon()
|
|
||||||
{
|
|
||||||
#if !defined(BSPF_MAC_OSX) && !defined(BSPF_UNIX)
|
|
||||||
#include "stella.xpm" // The Stella icon
|
|
||||||
|
|
||||||
// Set the window icon
|
|
||||||
uInt32 w, h, ncols, nbytes;
|
|
||||||
uInt32 rgba[256], icon[32 * 32];
|
|
||||||
uInt8 mask[32][4];
|
|
||||||
|
|
||||||
sscanf(stella_icon[0], "%u %u %u %u", &w, &h, &ncols, &nbytes);
|
|
||||||
if((w != 32) || (h != 32) || (ncols > 255) || (nbytes > 1))
|
|
||||||
{
|
|
||||||
myOSystem->logMessage("ERROR: Couldn't load the application icon.", 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(uInt32 i = 0; i < ncols; i++)
|
|
||||||
{
|
|
||||||
unsigned char code;
|
|
||||||
char color[32];
|
|
||||||
uInt32 col;
|
|
||||||
|
|
||||||
sscanf(stella_icon[1 + i], "%c c %s", &code, color);
|
|
||||||
if(!strcmp(color, "None"))
|
|
||||||
col = 0x00000000;
|
|
||||||
else if(!strcmp(color, "black"))
|
|
||||||
col = 0xFF000000;
|
|
||||||
else if (color[0] == '#')
|
|
||||||
{
|
|
||||||
sscanf(color + 1, "%06x", &col);
|
|
||||||
col |= 0xFF000000;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
myOSystem->logMessage("ERROR: Couldn't load the application icon.", 0);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
rgba[code] = col;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(mask, 0, sizeof(mask));
|
|
||||||
for(h = 0; h < 32; h++)
|
|
||||||
{
|
|
||||||
const char* line = stella_icon[1 + ncols + h];
|
|
||||||
for(w = 0; w < 32; w++)
|
|
||||||
{
|
|
||||||
icon[w + 32 * h] = rgba[(int)line[w]];
|
|
||||||
if(rgba[(int)line[w]] & 0xFF000000)
|
|
||||||
mask[h][w >> 3] |= 1 << (7 - (w & 0x07));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Surface *surface = SDL_CreateRGBSurfaceFrom(icon, 32, 32, 32,
|
|
||||||
32 * 4, 0xFF0000, 0x00FF00, 0x0000FF, 0xFF000000);
|
|
||||||
SDL_WM_SetIcon(surface, (unsigned char *) mask);
|
|
||||||
SDL_FreeSurface(surface);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
uInt8 FrameBuffer::getPhosphor(uInt8 c1, uInt8 c2) const
|
uInt8 FrameBuffer::getPhosphor(uInt8 c1, uInt8 c2) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
#define FRAMEBUFFER_HXX
|
#define FRAMEBUFFER_HXX
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <SDL.h>
|
|
||||||
|
|
||||||
class FBSurface;
|
class FBSurface;
|
||||||
class OSystem;
|
class OSystem;
|
||||||
|
@ -54,6 +53,12 @@ enum FBInitStatus {
|
||||||
kFailNotSupported,
|
kFailNotSupported,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Various hints that the FrameBuffer can pass to the underlying
|
||||||
|
// video renderer (this will expand as required
|
||||||
|
enum FBHint {
|
||||||
|
kFullScreen = 0x1
|
||||||
|
};
|
||||||
|
|
||||||
// Positions for onscreen/overlaid messages
|
// Positions for onscreen/overlaid messages
|
||||||
enum MessagePosition {
|
enum MessagePosition {
|
||||||
kTopLeft,
|
kTopLeft,
|
||||||
|
@ -241,21 +246,6 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
void toggleGrabMouse();
|
void toggleGrabMouse();
|
||||||
|
|
||||||
/**
|
|
||||||
Shows or hides the cursor based on the given boolean value.
|
|
||||||
*/
|
|
||||||
virtual void showCursor(bool show);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Answers if the display is currently in fullscreen mode.
|
|
||||||
*/
|
|
||||||
bool fullScreen() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set the title for the main SDL window.
|
|
||||||
*/
|
|
||||||
void setWindowTitle(const string& title);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get the supported TIA filters for the given framebuffer type.
|
Get the supported TIA filters for the given framebuffer type.
|
||||||
*/
|
*/
|
||||||
|
@ -317,10 +307,25 @@ class FrameBuffer
|
||||||
uInt8 getPhosphor(uInt8 c1, uInt8 c2) const;
|
uInt8 getPhosphor(uInt8 c1, uInt8 c2) const;
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// The following methods are system-specific and *may* be implemented
|
// The following methods are system-specific and can/must be
|
||||||
// in derived classes.
|
// implemented in derived classes.
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
public:
|
public:
|
||||||
|
/**
|
||||||
|
Shows or hides the cursor based on the given boolean value.
|
||||||
|
*/
|
||||||
|
virtual void showCursor(bool show) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Answers if the display is currently in fullscreen mode.
|
||||||
|
*/
|
||||||
|
virtual bool fullScreen() const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set the title for the main window.
|
||||||
|
*/
|
||||||
|
virtual void setWindowTitle(const string& title) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Enable/disable NTSC filtering effects.
|
Enable/disable NTSC filtering effects.
|
||||||
*/
|
*/
|
||||||
|
@ -331,22 +336,6 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
virtual string effectsInfo() const { return "None / not available"; }
|
virtual string effectsInfo() const { return "None / not available"; }
|
||||||
|
|
||||||
private:
|
|
||||||
/**
|
|
||||||
Change scanline intensity and interpolation.
|
|
||||||
|
|
||||||
@param relative If non-zero, change current intensity by
|
|
||||||
'relative' amount, otherwise set to 'absolute'
|
|
||||||
@return New current intensity
|
|
||||||
*/
|
|
||||||
virtual uInt32 enableScanlines(int relative, int absolute = 50) { return absolute; }
|
|
||||||
virtual void enableScanlineInterpolation(bool enable) { }
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
// The following methods are system-specific and *must* be implemented
|
|
||||||
// in derived classes.
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
|
||||||
public:
|
|
||||||
/**
|
/**
|
||||||
Enable/disable phosphor effect.
|
Enable/disable phosphor effect.
|
||||||
*/
|
*/
|
||||||
|
@ -411,11 +400,11 @@ class FrameBuffer
|
||||||
uInt8 avail; // 0x1 bit -> software, 0x2 bit -> opengl
|
uInt8 avail; // 0x1 bit -> software, 0x2 bit -> opengl
|
||||||
};
|
};
|
||||||
|
|
||||||
// Contains all relevant info for the dimensions of an SDL screen
|
// Contains all relevant info for the dimensions of a video screen
|
||||||
// Also takes care of the case when the SDL image should be 'centered'
|
// Also takes care of the case when the image should be 'centered'
|
||||||
// within the given screen
|
// within the given screen
|
||||||
// image_XXX are the image offsets into the SDL screen
|
// image_XXX are the image offsets into the screen
|
||||||
// screen_XXX are the dimensions of the SDL screen itself
|
// screen_XXX are the dimensions of the screen itself
|
||||||
// Also contains relevant info for the graphics mode/filter to use
|
// Also contains relevant info for the graphics mode/filter to use
|
||||||
// when rendering the image
|
// when rendering the image
|
||||||
struct VideoMode {
|
struct VideoMode {
|
||||||
|
@ -436,11 +425,13 @@ class FrameBuffer
|
||||||
This method is called to initialize the video subsystem
|
This method is called to initialize the video subsystem
|
||||||
with the given video mode. Normally, it will also call setVidMode().
|
with the given video mode. Normally, it will also call setVidMode().
|
||||||
|
|
||||||
|
@param title The title for
|
||||||
@param mode The video mode to use
|
@param mode The video mode to use
|
||||||
|
@param full Whether this is a fullscreen or windowed mode
|
||||||
|
|
||||||
@return False on any errors, else true
|
@return False on any errors, else true
|
||||||
*/
|
*/
|
||||||
virtual bool initSubsystem(VideoMode& mode) = 0;
|
virtual bool initSubsystem(VideoMode& mode, bool full) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method is called to change to the given video mode. If the mode
|
This method is called to change to the given video mode. If the mode
|
||||||
|
@ -452,6 +443,15 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
virtual bool setVidMode(VideoMode& mode) = 0;
|
virtual bool setVidMode(VideoMode& mode) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets a hint that the underlying renderer may use; it is also free
|
||||||
|
to ignore it completely.
|
||||||
|
|
||||||
|
@param hint The hint to set
|
||||||
|
@param enabled Whether the hint should be turned on or off
|
||||||
|
*/
|
||||||
|
virtual void setHint(FBHint hint, bool enabled) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method is called to invalidate the contents of the entire
|
This method is called to invalidate the contents of the entire
|
||||||
framebuffer (ie, mark the current content as invalid, and erase it on
|
framebuffer (ie, mark the current content as invalid, and erase it on
|
||||||
|
@ -469,6 +469,26 @@ class FrameBuffer
|
||||||
*/
|
*/
|
||||||
virtual FBSurface* createSurface(int w, int h, bool useBase = false) const = 0;
|
virtual FBSurface* createSurface(int w, int h, bool useBase = false) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Change scanline intensity and interpolation.
|
||||||
|
|
||||||
|
@param relative If non-zero, change current intensity by
|
||||||
|
'relative' amount, otherwise set to 'absolute'
|
||||||
|
@return New current intensity
|
||||||
|
*/
|
||||||
|
virtual uInt32 enableScanlines(int relative, int absolute = 50) { return absolute; }
|
||||||
|
virtual void enableScanlineInterpolation(bool enable) { }
|
||||||
|
|
||||||
|
/**
|
||||||
|
Grabs or ungrabs the mouse based on the given boolean value.
|
||||||
|
*/
|
||||||
|
virtual void grabMouse(bool grab) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Set the icon for the main window.
|
||||||
|
*/
|
||||||
|
virtual void setWindowIcon() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This method should be called anytime the TIA needs to be redrawn
|
This method should be called anytime the TIA needs to be redrawn
|
||||||
to the screen (full indicating that a full redraw is required).
|
to the screen (full indicating that a full redraw is required).
|
||||||
|
@ -495,15 +515,6 @@ class FrameBuffer
|
||||||
// The parent system for the framebuffer
|
// The parent system for the framebuffer
|
||||||
OSystem* myOSystem;
|
OSystem* myOSystem;
|
||||||
|
|
||||||
// The SDL video buffer
|
|
||||||
SDL_Surface* myScreen;
|
|
||||||
|
|
||||||
// SDL initialization flags
|
|
||||||
// This is set by the base FrameBuffer class, and read by the derived classes
|
|
||||||
// If a FrameBuffer is successfully created, the derived classes must modify
|
|
||||||
// it to point to the actual flags used by the SDL_Surface
|
|
||||||
uInt32 mySDLFlags;
|
|
||||||
|
|
||||||
// Indicates if the entire frame need to redrawn
|
// Indicates if the entire frame need to redrawn
|
||||||
bool myRedrawEntireFrame;
|
bool myRedrawEntireFrame;
|
||||||
|
|
||||||
|
@ -518,28 +529,13 @@ class FrameBuffer
|
||||||
|
|
||||||
// TIA palettes for normal and phosphor modes
|
// TIA palettes for normal and phosphor modes
|
||||||
// 'myDefPalette' also contains the UI palette
|
// 'myDefPalette' also contains the UI palette
|
||||||
// The '24' version of myDefPalette is used in 24-bit colour mode,
|
|
||||||
// eliminating having to deal with endian and shift issues
|
|
||||||
// Phosphor mode doesn't have a corresponding '24' mode, since it
|
|
||||||
// would require a 192KB lookup table
|
|
||||||
Uint32 myDefPalette[256+kNumColors];
|
Uint32 myDefPalette[256+kNumColors];
|
||||||
Uint32 myAvgPalette[256][256];
|
Uint32 myAvgPalette[256][256];
|
||||||
Uint8 myDefPalette24[256+kNumColors][3];
|
|
||||||
|
|
||||||
// Names of the TIA filters that can be used for this framebuffer
|
// Names of the TIA filters that can be used for this framebuffer
|
||||||
VariantList myTIAFilters;
|
VariantList myTIAFilters;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
|
||||||
Grabs or ungrabs the mouse based on the given boolean value.
|
|
||||||
*/
|
|
||||||
void grabMouse(bool grab);
|
|
||||||
|
|
||||||
/**
|
|
||||||
Set the icon for the main SDL window.
|
|
||||||
*/
|
|
||||||
void setWindowIcon();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Draw pending messages.
|
Draw pending messages.
|
||||||
*/
|
*/
|
||||||
|
@ -622,7 +618,7 @@ class FrameBuffer
|
||||||
// any image 'centering'
|
// any image 'centering'
|
||||||
GUI::Rect myImageRect;
|
GUI::Rect myImageRect;
|
||||||
|
|
||||||
// Dimensions of the SDL window (not always the same as the image)
|
// Dimensions of the main window (not always the same as the image)
|
||||||
GUI::Rect myScreenRect;
|
GUI::Rect myScreenRect;
|
||||||
|
|
||||||
// Used for onscreen messages and frame statistics
|
// Used for onscreen messages and frame statistics
|
||||||
|
@ -653,11 +649,11 @@ class FrameBuffer
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This class is basically a thin wrapper around an SDL_Surface structure.
|
This class is basically a thin wrapper around the video toolkit 'surface'
|
||||||
We do it this way so the SDL stuff won't be dragged into the depths of
|
structure. We do it this way so the actual video toolkit won't be dragged
|
||||||
the codebase. All drawing is done into FBSurfaces, which are then
|
into the depths of the codebase. All drawing is done into FBSurfaces,
|
||||||
drawn into the FrameBuffer. Each FrameBuffer-derived class is
|
which are then drawn into the FrameBuffer. Each FrameBuffer-derived class
|
||||||
responsible for extending an FBSurface object suitable to the
|
is responsible for extending an FBSurface object suitable to the
|
||||||
FrameBuffer type.
|
FrameBuffer type.
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
|
|
|
@ -23,14 +23,10 @@
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
#include "Settings.hxx"
|
#include "Settings.hxx"
|
||||||
|
|
||||||
#include "FrameBuffer.hxx"
|
#include "FrameBufferSDL2.hxx"
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
#include "FrameBufferGL.hxx"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "Sound.hxx"
|
|
||||||
#ifdef SOUND_SUPPORT
|
#ifdef SOUND_SUPPORT
|
||||||
#include "SoundSDL.hxx"
|
#include "SoundSDL2.hxx"
|
||||||
#else
|
#else
|
||||||
#include "SoundNull.hxx"
|
#include "SoundNull.hxx"
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +36,9 @@
|
||||||
for the various ports of Stella, and always returns a valid media object
|
for the various ports of Stella, and always returns a valid media object
|
||||||
based on the specific port and restrictions on that port.
|
based on the specific port and restrictions on that port.
|
||||||
|
|
||||||
I think you can see why this mess was put into a factory class :)
|
As of SDL2, this code is greatly simplified. However, it remains here
|
||||||
|
in case we ever have multiple backend implementations again (should
|
||||||
|
not be necessary since SDL2 covers this nicely).
|
||||||
|
|
||||||
@author Stephen Anthony
|
@author Stephen Anthony
|
||||||
@version $Id$
|
@version $Id$
|
||||||
|
@ -50,35 +48,16 @@ class MediaFactory
|
||||||
public:
|
public:
|
||||||
static FrameBuffer* createVideo(OSystem* osystem)
|
static FrameBuffer* createVideo(OSystem* osystem)
|
||||||
{
|
{
|
||||||
FrameBuffer* fb = (FrameBuffer*) NULL;
|
return new FrameBufferSDL2(osystem);
|
||||||
|
|
||||||
// OpenGL mode *may* fail, so we check for it first
|
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
if(osystem->settings().getString("video") == "gl")
|
|
||||||
{
|
|
||||||
const string& gl_lib = osystem->settings().getString("gl_lib");
|
|
||||||
if(FrameBufferGL::loadLibrary(gl_lib))
|
|
||||||
fb = new FrameBufferGL(osystem);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// This should never happen
|
|
||||||
assert(fb != NULL);
|
|
||||||
|
|
||||||
return fb;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Sound* createAudio(OSystem* osystem)
|
static Sound* createAudio(OSystem* osystem)
|
||||||
{
|
{
|
||||||
Sound* sound = (Sound*) NULL;
|
|
||||||
|
|
||||||
#ifdef SOUND_SUPPORT
|
#ifdef SOUND_SUPPORT
|
||||||
sound = new SoundSDL(osystem);
|
return new SoundSDL2(osystem);
|
||||||
#else
|
#else
|
||||||
sound = new SoundNull(osystem);
|
return new SoundNull(osystem);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return sound;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -98,9 +98,6 @@ OSystem::OSystem()
|
||||||
myMillisAtStart = (uInt32)(time(NULL) * 1000);
|
myMillisAtStart = (uInt32)(time(NULL) * 1000);
|
||||||
|
|
||||||
// Get built-in features
|
// Get built-in features
|
||||||
#ifdef DISPLAY_OPENGL
|
|
||||||
myFeatures += "OpenGL ";
|
|
||||||
#endif
|
|
||||||
#ifdef SOUND_SUPPORT
|
#ifdef SOUND_SUPPORT
|
||||||
myFeatures += "Sound ";
|
myFeatures += "Sound ";
|
||||||
#endif
|
#endif
|
||||||
|
@ -393,22 +390,19 @@ FBInitStatus OSystem::createFrameBuffer()
|
||||||
case EventHandler::S_PAUSE:
|
case EventHandler::S_PAUSE:
|
||||||
case EventHandler::S_MENU:
|
case EventHandler::S_MENU:
|
||||||
case EventHandler::S_CMDMENU:
|
case EventHandler::S_CMDMENU:
|
||||||
fbstatus = myConsole->initializeVideo();
|
if((fbstatus = myConsole->initializeVideo()) != kSuccess)
|
||||||
if(fbstatus != kSuccess)
|
return fbstatus;
|
||||||
goto fallback;
|
|
||||||
break; // S_EMULATE, S_PAUSE, S_MENU, S_CMDMENU
|
break; // S_EMULATE, S_PAUSE, S_MENU, S_CMDMENU
|
||||||
|
|
||||||
case EventHandler::S_LAUNCHER:
|
case EventHandler::S_LAUNCHER:
|
||||||
fbstatus = myLauncher->initializeVideo();
|
if((fbstatus = myLauncher->initializeVideo()) != kSuccess)
|
||||||
if(fbstatus != kSuccess)
|
return fbstatus;
|
||||||
goto fallback;
|
|
||||||
break; // S_LAUNCHER
|
break; // S_LAUNCHER
|
||||||
|
|
||||||
#ifdef DEBUGGER_SUPPORT
|
#ifdef DEBUGGER_SUPPORT
|
||||||
case EventHandler::S_DEBUGGER:
|
case EventHandler::S_DEBUGGER:
|
||||||
fbstatus = myDebugger->initializeVideo();
|
if((fbstatus = myDebugger->initializeVideo()) != kSuccess)
|
||||||
if(fbstatus != kSuccess)
|
return fbstatus;
|
||||||
goto fallback;
|
|
||||||
break; // S_DEBUGGER
|
break; // S_DEBUGGER
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -428,29 +422,6 @@ FBInitStatus OSystem::createFrameBuffer()
|
||||||
}
|
}
|
||||||
|
|
||||||
return fbstatus;
|
return fbstatus;
|
||||||
|
|
||||||
// GOTO are normally considered evil, unless well documented :)
|
|
||||||
// If initialization of video system fails while in OpenGL mode
|
|
||||||
// because OpenGL is unavailable, attempt to fallback to software mode
|
|
||||||
// Otherwise, pass the error to the parent
|
|
||||||
fallback:
|
|
||||||
if(fbstatus == kFailNotSupported && myFrameBuffer &&
|
|
||||||
myFrameBuffer->type() == kDoubleBuffer)
|
|
||||||
{
|
|
||||||
logMessage("ERROR: OpenGL mode failed, fallback to software", 0);
|
|
||||||
delete myFrameBuffer; myFrameBuffer = NULL;
|
|
||||||
mySettings->setValue("video", "soft");
|
|
||||||
FBInitStatus newstatus = createFrameBuffer();
|
|
||||||
if(newstatus == kSuccess)
|
|
||||||
{
|
|
||||||
setFramerate(60);
|
|
||||||
myFrameBuffer->showMessage("OpenGL mode failed, fallback to software",
|
|
||||||
kMiddleCenter, true);
|
|
||||||
}
|
|
||||||
return newstatus;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return fbstatus;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -511,16 +482,6 @@ string OSystem::createConsole(const FilesystemNode& rom, const string& md5sum,
|
||||||
#ifdef CHEATCODE_SUPPORT
|
#ifdef CHEATCODE_SUPPORT
|
||||||
myCheatManager->loadCheats(myRomMD5);
|
myCheatManager->loadCheats(myRomMD5);
|
||||||
#endif
|
#endif
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
// For some reason, ATI video drivers for OpenGL in Win32 cause problems
|
|
||||||
// if the sound isn't initialized before the video
|
|
||||||
// According to the SDL documentation, it shouldn't matter what order the
|
|
||||||
// systems are initialized, but apparently it *does* matter
|
|
||||||
// For now, I'll just reverse the ordering, as suggested by 'zagon' at
|
|
||||||
// http://www.atariage.com/forums/index.php?showtopic=126090&view=findpost&p=1648693
|
|
||||||
// Hopefully it won't break anything else
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
|
||||||
myConsole->initializeAudio();
|
|
||||||
myEventHandler->reset(EventHandler::S_EMULATE);
|
myEventHandler->reset(EventHandler::S_EMULATE);
|
||||||
myEventHandler->setMouseControllerMode(mySettings->getString("usemouse"));
|
myEventHandler->setMouseControllerMode(mySettings->getString("usemouse"));
|
||||||
if(createFrameBuffer() != kSuccess) // Takes care of initializeVideo()
|
if(createFrameBuffer() != kSuccess) // Takes care of initializeVideo()
|
||||||
|
@ -529,6 +490,7 @@ string OSystem::createConsole(const FilesystemNode& rom, const string& md5sum,
|
||||||
myEventHandler->reset(EventHandler::S_LAUNCHER);
|
myEventHandler->reset(EventHandler::S_LAUNCHER);
|
||||||
return "ERROR: Couldn't create framebuffer for console";
|
return "ERROR: Couldn't create framebuffer for console";
|
||||||
}
|
}
|
||||||
|
myConsole->initializeAudio();
|
||||||
|
|
||||||
if(showmessage)
|
if(showmessage)
|
||||||
{
|
{
|
||||||
|
|
|
@ -287,7 +287,7 @@ void Settings::validate()
|
||||||
s = getString("timing");
|
s = getString("timing");
|
||||||
if(s != "sleep" && s != "busy") setInternal("timing", "sleep");
|
if(s != "sleep" && s != "busy") setInternal("timing", "sleep");
|
||||||
|
|
||||||
#ifdef DISPLAY_OPENGL
|
//FIXSDL
|
||||||
i = getInt("gl_aspectn");
|
i = getInt("gl_aspectn");
|
||||||
if(i < 80 || i > 120) setInternal("gl_aspectn", "100");
|
if(i < 80 || i > 120) setInternal("gl_aspectn", "100");
|
||||||
i = getInt("gl_aspectp");
|
i = getInt("gl_aspectp");
|
||||||
|
@ -295,8 +295,7 @@ void Settings::validate()
|
||||||
|
|
||||||
i = getInt("tv_filter");
|
i = getInt("tv_filter");
|
||||||
if(i < 0 || i > 5) setInternal("tv_filter", "0");
|
if(i < 0 || i > 5) setInternal("tv_filter", "0");
|
||||||
|
//////////////////
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SOUND_SUPPORT
|
#ifdef SOUND_SUPPORT
|
||||||
i = getInt("volume");
|
i = getInt("volume");
|
||||||
|
@ -356,7 +355,7 @@ void Settings::usage()
|
||||||
<< endl
|
<< endl
|
||||||
<< " -video <type> Type is one of the following:\n"
|
<< " -video <type> Type is one of the following:\n"
|
||||||
<< " soft SDL software mode\n"
|
<< " soft SDL software mode\n"
|
||||||
#ifdef DISPLAY_OPENGL
|
// FIXSDL
|
||||||
<< " gl SDL OpenGL mode\n"
|
<< " gl SDL OpenGL mode\n"
|
||||||
<< endl
|
<< endl
|
||||||
<< " -gl_lib <name> Specify the OpenGL library\n"
|
<< " -gl_lib <name> Specify the OpenGL library\n"
|
||||||
|
@ -381,7 +380,6 @@ void Settings::usage()
|
||||||
<< " -tv_fringing <value> Set TV effects custom fringing to value 1.0 - 1.0\n"
|
<< " -tv_fringing <value> Set TV effects custom fringing to value 1.0 - 1.0\n"
|
||||||
<< " -tv_bleed <value> Set TV effects custom bleed to value 1.0 - 1.0\n"
|
<< " -tv_bleed <value> Set TV effects custom bleed to value 1.0 - 1.0\n"
|
||||||
<< endl
|
<< endl
|
||||||
#endif
|
|
||||||
<< " -tia_filter <filter> Use the specified filter in emulation mode\n"
|
<< " -tia_filter <filter> Use the specified filter in emulation mode\n"
|
||||||
<< " -fullscreen <1|0|-1> Use fullscreen mode (1 or 0), or disable switching to fullscreen entirely\n"
|
<< " -fullscreen <1|0|-1> Use fullscreen mode (1 or 0), or disable switching to fullscreen entirely\n"
|
||||||
<< " -fullres <auto|WxH> The resolution to use in fullscreen mode\n"
|
<< " -fullres <auto|WxH> The resolution to use in fullscreen mode\n"
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#include "StringList.hxx"
|
#include "StringList.hxx"
|
||||||
#include "Widget.hxx"
|
#include "Widget.hxx"
|
||||||
#include "TabWidget.hxx"
|
#include "TabWidget.hxx"
|
||||||
#include "FrameBufferGL.hxx"
|
|
||||||
#include "NTSCFilter.hxx"
|
#include "NTSCFilter.hxx"
|
||||||
|
|
||||||
#include "VideoDialog.hxx"
|
#include "VideoDialog.hxx"
|
||||||
|
@ -78,9 +77,9 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent,
|
||||||
|
|
||||||
items.clear();
|
items.clear();
|
||||||
items.push_back("Software", "soft");
|
items.push_back("Software", "soft");
|
||||||
#ifdef DISPLAY_OPENGL
|
//FIXSDL
|
||||||
items.push_back("OpenGL", "gl");
|
items.push_back("OpenGL", "gl");
|
||||||
#endif
|
/////////////
|
||||||
myRendererPopup = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight,
|
myRendererPopup = new PopUpWidget(myTab, font, xpos, ypos, pwidth, lineHeight,
|
||||||
items, "(*) ", lwidth);
|
items, "(*) ", lwidth);
|
||||||
wid.push_back(myRendererPopup);
|
wid.push_back(myRendererPopup);
|
||||||
|
@ -337,7 +336,7 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent,
|
||||||
addBGroupToFocusList(wid);
|
addBGroupToFocusList(wid);
|
||||||
|
|
||||||
// Disable certain functions when we know they aren't present
|
// Disable certain functions when we know they aren't present
|
||||||
#ifndef DISPLAY_OPENGL
|
//FIXSDL
|
||||||
myGLFilterPopup->clearFlags(WIDGET_ENABLED);
|
myGLFilterPopup->clearFlags(WIDGET_ENABLED);
|
||||||
myNAspectRatioSlider->clearFlags(WIDGET_ENABLED);
|
myNAspectRatioSlider->clearFlags(WIDGET_ENABLED);
|
||||||
myNAspectRatioLabel->clearFlags(WIDGET_ENABLED);
|
myNAspectRatioLabel->clearFlags(WIDGET_ENABLED);
|
||||||
|
@ -378,7 +377,7 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent,
|
||||||
myCloneRGB->clearFlags(WIDGET_ENABLED);
|
myCloneRGB->clearFlags(WIDGET_ENABLED);
|
||||||
myCloneBad->clearFlags(WIDGET_ENABLED);
|
myCloneBad->clearFlags(WIDGET_ENABLED);
|
||||||
myCloneCustom->clearFlags(WIDGET_ENABLED);
|
myCloneCustom->clearFlags(WIDGET_ENABLED);
|
||||||
#endif
|
//////////////////////////
|
||||||
#ifndef WINDOWED_SUPPORT
|
#ifndef WINDOWED_SUPPORT
|
||||||
myFullscreenCheckbox->clearFlags(WIDGET_ENABLED);
|
myFullscreenCheckbox->clearFlags(WIDGET_ENABLED);
|
||||||
myCenterCheckbox->clearFlags(WIDGET_ENABLED);
|
myCenterCheckbox->clearFlags(WIDGET_ENABLED);
|
||||||
|
|
|
@ -102,7 +102,7 @@
|
||||||
<AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;DISPLAY_OPENGL;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
@ -134,7 +134,7 @@ SDLmain.lib
|
||||||
<AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
|
<AdditionalOptions>/MP %(AdditionalOptions)</AdditionalOptions>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;DISPLAY_OPENGL;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<MinimalRebuild>false</MinimalRebuild>
|
<MinimalRebuild>false</MinimalRebuild>
|
||||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
@ -164,7 +164,7 @@ SDLmain.lib
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<WholeProgramOptimization>false</WholeProgramOptimization>
|
<WholeProgramOptimization>false</WholeProgramOptimization>
|
||||||
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;DISPLAY_OPENGL;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
<PrecompiledHeader>
|
<PrecompiledHeader>
|
||||||
|
@ -198,7 +198,7 @@ SDLmain.lib
|
||||||
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
|
||||||
<OmitFramePointers>true</OmitFramePointers>
|
<OmitFramePointers>true</OmitFramePointers>
|
||||||
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\yacc;..\emucore;..\common;..\common\tv_filters;..\gui;..\debugger\gui;..\debugger;..\windows;..\cheat;..\zlib;..\libpng;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;DISPLAY_OPENGL;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>BSPF_WINDOWS;WIN32;NDEBUG;JOYSTICK_SUPPORT;DEBUGGER_SUPPORT;THUMB_SUPPORT;WINDOWED_SUPPORT;SOUND_SUPPORT;CHEATCODE_SUPPORT;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
<RuntimeTypeInfo>false</RuntimeTypeInfo>
|
||||||
<PrecompiledHeader>
|
<PrecompiledHeader>
|
||||||
|
@ -224,9 +224,9 @@ SDLmain.lib
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\common\Base.cxx" />
|
<ClCompile Include="..\common\Base.cxx" />
|
||||||
<ClCompile Include="..\common\FBSurfaceGL.cxx" />
|
<ClCompile Include="..\common\FBSurfaceUI.cxx" />
|
||||||
<ClCompile Include="..\common\FBSurfaceTIA.cxx" />
|
<ClCompile Include="..\common\FBSurfaceTIA.cxx" />
|
||||||
<ClCompile Include="..\common\FrameBufferGL.cxx" />
|
<ClCompile Include="..\common\FrameBufferSDL2.cxx" />
|
||||||
<ClCompile Include="..\common\FSNodeZIP.cxx" />
|
<ClCompile Include="..\common\FSNodeZIP.cxx" />
|
||||||
<ClCompile Include="..\common\MouseControl.cxx" />
|
<ClCompile Include="..\common\MouseControl.cxx" />
|
||||||
<ClCompile Include="..\common\tv_filters\atari_ntsc.c" />
|
<ClCompile Include="..\common\tv_filters\atari_ntsc.c" />
|
||||||
|
@ -288,7 +288,7 @@ SDLmain.lib
|
||||||
<ClCompile Include="SDL_win32_main.c" />
|
<ClCompile Include="SDL_win32_main.c" />
|
||||||
<ClCompile Include="SerialPortWINDOWS.cxx" />
|
<ClCompile Include="SerialPortWINDOWS.cxx" />
|
||||||
<ClCompile Include="SettingsWINDOWS.cxx" />
|
<ClCompile Include="SettingsWINDOWS.cxx" />
|
||||||
<ClCompile Include="..\common\SoundSDL.cxx" />
|
<ClCompile Include="..\common\SoundSDL2.cxx" />
|
||||||
<ClCompile Include="..\emucore\AtariVox.cxx" />
|
<ClCompile Include="..\emucore\AtariVox.cxx" />
|
||||||
<ClCompile Include="..\emucore\Booster.cxx" />
|
<ClCompile Include="..\emucore\Booster.cxx" />
|
||||||
<ClCompile Include="..\emucore\Cart.cxx" />
|
<ClCompile Include="..\emucore\Cart.cxx" />
|
||||||
|
@ -456,9 +456,9 @@ SDLmain.lib
|
||||||
<ClInclude Include="..\common\Array.hxx" />
|
<ClInclude Include="..\common\Array.hxx" />
|
||||||
<ClInclude Include="..\common\Base.hxx" />
|
<ClInclude Include="..\common\Base.hxx" />
|
||||||
<ClInclude Include="..\common\bspf.hxx" />
|
<ClInclude Include="..\common\bspf.hxx" />
|
||||||
<ClInclude Include="..\common\FBSurfaceGL.hxx" />
|
<ClInclude Include="..\common\FBSurfaceUI.hxx" />
|
||||||
<ClInclude Include="..\common\FBSurfaceTIA.hxx" />
|
<ClInclude Include="..\common\FBSurfaceTIA.hxx" />
|
||||||
<ClInclude Include="..\common\FrameBufferGL.hxx" />
|
<ClInclude Include="..\common\FrameBufferSDL2.hxx" />
|
||||||
<ClInclude Include="..\common\FSNodeFactory.hxx" />
|
<ClInclude Include="..\common\FSNodeFactory.hxx" />
|
||||||
<ClInclude Include="..\common\FSNodeZIP.hxx" />
|
<ClInclude Include="..\common\FSNodeZIP.hxx" />
|
||||||
<ClInclude Include="..\common\MouseControl.hxx" />
|
<ClInclude Include="..\common\MouseControl.hxx" />
|
||||||
|
@ -533,7 +533,7 @@ SDLmain.lib
|
||||||
<ClInclude Include="SerialPortWINDOWS.hxx" />
|
<ClInclude Include="SerialPortWINDOWS.hxx" />
|
||||||
<ClInclude Include="SettingsWINDOWS.hxx" />
|
<ClInclude Include="SettingsWINDOWS.hxx" />
|
||||||
<ClInclude Include="..\common\SharedPtr.hxx" />
|
<ClInclude Include="..\common\SharedPtr.hxx" />
|
||||||
<ClInclude Include="..\common\SoundSDL.hxx" />
|
<ClInclude Include="..\common\SoundSDL2.hxx" />
|
||||||
<ClInclude Include="..\common\Stack.hxx" />
|
<ClInclude Include="..\common\Stack.hxx" />
|
||||||
<ClInclude Include="..\common\Version.hxx" />
|
<ClInclude Include="..\common\Version.hxx" />
|
||||||
<ClInclude Include="..\common\VideoModeList.hxx" />
|
<ClInclude Include="..\common\VideoModeList.hxx" />
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\common\FrameBufferGL.cxx">
|
<ClCompile Include="..\common\FrameBufferSDL2.cxx">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="FSNodeWINDOWS.cxx">
|
<ClCompile Include="FSNodeWINDOWS.cxx">
|
||||||
|
@ -75,7 +75,7 @@
|
||||||
<ClCompile Include="SettingsWINDOWS.cxx">
|
<ClCompile Include="SettingsWINDOWS.cxx">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\common\SoundSDL.cxx">
|
<ClCompile Include="..\common\SoundSDL2.cxx">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\emucore\AtariVox.cxx">
|
<ClCompile Include="..\emucore\AtariVox.cxx">
|
||||||
|
@ -567,7 +567,7 @@
|
||||||
<ClCompile Include="..\gui\LoggerDialog.cxx">
|
<ClCompile Include="..\gui\LoggerDialog.cxx">
|
||||||
<Filter>Source Files\gui</Filter>
|
<Filter>Source Files\gui</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\common\FBSurfaceGL.cxx">
|
<ClCompile Include="..\common\FBSurfaceUI.cxx">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\common\FBSurfaceTIA.cxx">
|
<ClCompile Include="..\common\FBSurfaceTIA.cxx">
|
||||||
|
@ -731,7 +731,7 @@
|
||||||
<ClInclude Include="..\common\bspf.hxx">
|
<ClInclude Include="..\common\bspf.hxx">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\common\FrameBufferGL.hxx">
|
<ClInclude Include="..\common\FrameBufferSDL2.hxx">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="HomeFinder.hxx">
|
<ClInclude Include="HomeFinder.hxx">
|
||||||
|
@ -752,7 +752,7 @@
|
||||||
<ClInclude Include="..\common\SharedPtr.hxx">
|
<ClInclude Include="..\common\SharedPtr.hxx">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\common\SoundSDL.hxx">
|
<ClInclude Include="..\common\SoundSDL2.hxx">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\common\Stack.hxx">
|
<ClInclude Include="..\common\Stack.hxx">
|
||||||
|
@ -1265,7 +1265,7 @@
|
||||||
<ClInclude Include="..\gui\LoggerDialog.hxx">
|
<ClInclude Include="..\gui\LoggerDialog.hxx">
|
||||||
<Filter>Header Files\gui</Filter>
|
<Filter>Header Files\gui</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\common\FBSurfaceGL.hxx">
|
<ClInclude Include="..\common\FBSurfaceUI.hxx">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
<ClInclude Include="..\common\FBSurfaceTIA.hxx">
|
<ClInclude Include="..\common\FBSurfaceTIA.hxx">
|
||||||
|
|
Loading…
Reference in New Issue