MYST3: Fix the OpenGL with shaders renderer initialization

... and make it slightly harder to break
This commit is contained in:
Bastien Bouclet 2014-07-04 15:34:51 +02:00
parent bb760d4a47
commit de7392c1b5
8 changed files with 42 additions and 51 deletions

View file

@ -54,8 +54,6 @@ class Renderer {
virtual void init(Graphics::PixelBuffer &screenBuffer) = 0; virtual void init(Graphics::PixelBuffer &screenBuffer) = 0;
virtual void initFont(const Graphics::Surface *surface) = 0; virtual void initFont(const Graphics::Surface *surface) = 0;
static Renderer *createRenderer(OSystem *system);
virtual void clear() = 0; virtual void clear() = 0;
virtual void setupCameraOrtho2D() = 0; virtual void setupCameraOrtho2D() = 0;
virtual void setupCameraPerspective(float pitch, float heading, float fov) = 0; virtual void setupCameraPerspective(float pitch, float heading, float fov) = 0;

View file

@ -42,10 +42,6 @@
namespace Myst3 { namespace Myst3 {
Renderer *Renderer::createRenderer(OSystem *system) {
return new OpenGLRenderer(system);
}
static const GLfloat cubeFacesVertices[][12] = { static const GLfloat cubeFacesVertices[][12] = {
// X Y Z // X Y Z
{ -320.0f, -320.0f, -320.0f, { -320.0f, -320.0f, -320.0f,

View file

@ -36,28 +36,28 @@ public:
OpenGLRenderer(OSystem *_system); OpenGLRenderer(OSystem *_system);
virtual ~OpenGLRenderer(); virtual ~OpenGLRenderer();
virtual void init(Graphics::PixelBuffer &screenBuffer); virtual void init(Graphics::PixelBuffer &screenBuffer) override;
virtual void clear(); virtual void clear() override;
virtual void setupCameraOrtho2D(); virtual void setupCameraOrtho2D() override;
virtual void setupCameraPerspective(float pitch, float heading, float fov); virtual void setupCameraPerspective(float pitch, float heading, float fov) override;
Texture *createTexture(const Graphics::Surface *surface); Texture *createTexture(const Graphics::Surface *surface) override;
void freeTexture(Texture *texture); void freeTexture(Texture *texture) override;
virtual void drawRect2D(const Common::Rect &rect, uint32 color); virtual void drawRect2D(const Common::Rect &rect, uint32 color) override;
virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture, virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture,
float transparency = -1.0, bool additiveBlending = false); float transparency = -1.0, bool additiveBlending = false) override;
virtual void drawTexturedRect3D(const Math::Vector3d &topLeft, const Math::Vector3d &bottomLeft, virtual void drawTexturedRect3D(const Math::Vector3d &topLeft, const Math::Vector3d &bottomLeft,
const Math::Vector3d &topRight, const Math::Vector3d &bottomRight, const Math::Vector3d &topRight, const Math::Vector3d &bottomRight,
Texture *texture); Texture *texture) override;
virtual void drawCube(Texture **textures); virtual void drawCube(Texture **textures) override;
virtual void draw2DText(const Common::String &text, const Common::Point &position); virtual void draw2DText(const Common::String &text, const Common::Point &position) override;
virtual Graphics::Surface *getScreenshot(); virtual Graphics::Surface *getScreenshot() override;
virtual void screenPosToDirection(const Common::Point screen, float &pitch, float &heading); virtual void screenPosToDirection(const Common::Point screen, float &pitch, float &heading) override;
private: private:
void drawFace(uint face, Texture *texture); void drawFace(uint face, Texture *texture);

View file

@ -66,10 +66,6 @@ Renderer *CreateGfxOpenGLShader(OSystem *system) {
return new ShaderRenderer(system); return new ShaderRenderer(system);
} }
Renderer *Renderer::createRenderer(OSystem *system) {
return new ShaderRenderer(system);
}
static const GLfloat box_vertices[] = { static const GLfloat box_vertices[] = {
// XS YT // XS YT
0.0, 0.0, 0.0, 0.0,
@ -143,7 +139,7 @@ void ShaderRenderer::freeTexture(Texture *texture) {
delete glTexture; delete glTexture;
} }
void ShaderRenderer::init() { void ShaderRenderer::init(Graphics::PixelBuffer &screenBuffer) {
#ifndef USE_GLES2 #ifndef USE_GLES2
GLenum err = glewInit(); GLenum err = glewInit();
if (err != GLEW_OK) { if (err != GLEW_OK) {

View file

@ -37,28 +37,28 @@ public:
ShaderRenderer(OSystem *_system); ShaderRenderer(OSystem *_system);
virtual ~ShaderRenderer(); virtual ~ShaderRenderer();
virtual void init(); virtual void init(Graphics::PixelBuffer &screenBuffer) override;
virtual void clear(); virtual void clear() override;
virtual void setupCameraOrtho2D(); virtual void setupCameraOrtho2D() override;
virtual void setupCameraPerspective(float pitch, float heading, float fov); virtual void setupCameraPerspective(float pitch, float heading, float fov) override;
virtual Texture *createTexture(const Graphics::Surface *surface); virtual Texture *createTexture(const Graphics::Surface *surface) override;
virtual void freeTexture(Texture *texture); virtual void freeTexture(Texture *texture) override;
virtual void drawRect2D(const Common::Rect &rect, uint32 color); virtual void drawRect2D(const Common::Rect &rect, uint32 color) override;
virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture, virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture,
float transparency = -1.0, bool additiveBlending = false); float transparency = -1.0, bool additiveBlending = false) override;
virtual void drawTexturedRect3D(const Math::Vector3d &topLeft, const Math::Vector3d &bottomLeft, virtual void drawTexturedRect3D(const Math::Vector3d &topLeft, const Math::Vector3d &bottomLeft,
const Math::Vector3d &topRight, const Math::Vector3d &bottomRight, const Math::Vector3d &topRight, const Math::Vector3d &bottomRight,
Texture *texture); Texture *texture) override;
virtual void drawCube(Texture **textures); virtual void drawCube(Texture **textures) override;
virtual void draw2DText(const Common::String &text, const Common::Point &position); virtual void draw2DText(const Common::String &text, const Common::Point &position) override;
virtual Graphics::Surface *getScreenshot(); virtual Graphics::Surface *getScreenshot() override;
virtual void screenPosToDirection(const Common::Point screen, float &pitch, float &heading); virtual void screenPosToDirection(const Common::Point screen, float &pitch, float &heading) override;
private: private:
void setupQuadEBO(); void setupQuadEBO();

View file

@ -36,7 +36,7 @@ public:
OpenGLTexture(const Graphics::Surface *surface, bool nonPoTSupport = false); OpenGLTexture(const Graphics::Surface *surface, bool nonPoTSupport = false);
virtual ~OpenGLTexture(); virtual ~OpenGLTexture();
void update(const Graphics::Surface *surface); void update(const Graphics::Surface *surface) override;
GLuint id; GLuint id;
GLuint internalFormat; GLuint internalFormat;

View file

@ -37,27 +37,28 @@ public:
TinyGLRenderer(OSystem *_system); TinyGLRenderer(OSystem *_system);
virtual ~TinyGLRenderer(); virtual ~TinyGLRenderer();
virtual void init(Graphics::PixelBuffer &screenBuffer); virtual void init(Graphics::PixelBuffer &screenBuffer) override;
virtual void clear(); virtual void clear() override;
virtual void setupCameraOrtho2D(); virtual void setupCameraOrtho2D() override;
virtual void setupCameraPerspective(float pitch, float heading, float fov); virtual void setupCameraPerspective(float pitch, float heading, float fov) override;
Texture *createTexture(const Graphics::Surface *surface); Texture *createTexture(const Graphics::Surface *surface) override;
void freeTexture(Texture *texture); void freeTexture(Texture *texture) override;
virtual void drawRect2D(const Common::Rect &rect, uint32 color); virtual void drawRect2D(const Common::Rect &rect, uint32 color) override;
virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture, float transparency = -1.0, bool additiveBlending = false); virtual void drawTexturedRect2D(const Common::Rect &screenRect, const Common::Rect &textureRect, Texture *texture,
float transparency = -1.0, bool additiveBlending = false) override;
virtual void drawTexturedRect3D(const Math::Vector3d &topLeft, const Math::Vector3d &bottomLeft, virtual void drawTexturedRect3D(const Math::Vector3d &topLeft, const Math::Vector3d &bottomLeft,
const Math::Vector3d &topRight, const Math::Vector3d &bottomRight, const Math::Vector3d &topRight, const Math::Vector3d &bottomRight,
Texture *texture); Texture *texture);
virtual void drawCube(Texture **textures); virtual void drawCube(Texture **textures) override;
virtual void draw2DText(const Common::String &text, const Common::Point &position); virtual void draw2DText(const Common::String &text, const Common::Point &position) override;
virtual Graphics::Surface *getScreenshot(); virtual Graphics::Surface *getScreenshot() override;
virtual void screenPosToDirection(const Common::Point screen, float &pitch, float &heading); virtual void screenPosToDirection(const Common::Point screen, float &pitch, float &heading) override;
private: private:
void drawFace(uint face, Texture *texture); void drawFace(uint face, Texture *texture);

View file

@ -36,7 +36,7 @@ public:
TinyGLTexture(const Graphics::Surface *surface, bool nonPoTSupport = false); TinyGLTexture(const Graphics::Surface *surface, bool nonPoTSupport = false);
virtual ~TinyGLTexture(); virtual ~TinyGLTexture();
void update(const Graphics::Surface *surface); void update(const Graphics::Surface *surface) override;
Graphics::PixelBuffer buffer; Graphics::PixelBuffer buffer;
TGLuint id; TGLuint id;