// This file was copied from the bsnes project.
// This is the license info, from ruby.hpp:
/*
ruby
version: 0.08 (2011-11-25)
license: public domain
*/
#pragma once
#ifndef __NO_OPENGL
#ifdef __APPLE__
#define GL_SILENCE_DEPRECATION
#endif
#include <SDL_opengl.h>
#include <string>
namespace OpenXcom
{
class Surface;
std::string strGLError(GLenum glErr);
#define glErrorCheck() {\
static bool reported = false;\
GLenum glErr;\
if (OpenGL::checkErrors && !reported && (glErr = glGetError()) != GL_NO_ERROR)\
{\
reported = true;\
\
do \
{ \
Log(LOG_WARNING) << __FILE__ << ":" << __LINE__ << ": glGetError() complaint: " << strGLError(glErr);\
} while (((glErr = glGetError()) != GL_NO_ERROR));\
}\
}
class OpenGL {
public:
GLuint gltexture;
GLuint glprogram;
bool linear;
bool shader_support;
uint32_t *buffer;
Surface *buffer_surface;
unsigned iwidth, iheight, iformat, ibpp;
static bool checkErrors;
/// call to resize internal buffer; internal use
void resize(unsigned width, unsigned height);
/// actually returns pointer to data buffer where one is to write the image
bool lock(uint32_t *&data, unsigned &pitch);
/// make all the pixels go away
void clear();
/// make the buffer show up on screen
void refresh(bool smooth, unsigned inwidth, unsigned inheight, unsigned outwidth, unsigned outheight, int topBlackBand, int bottomBlackBand, int leftBlackBand, int rightBlackBand);
/// set a shader! but what kind?
bool set_shader(const char *source);
/// same but for fragment shader?
void set_fragment_shader(const char *source);
/// and vertex?
void set_vertex_shader(const char *source);
/// init(), because we're too cool to initialize everything in the constructor
void init(int width, int height);
/// more like exit, because destructors are for uncool people
void term();
/// Try to set VSync!
void setVSync(bool sync);
/// constructor -- like we said, we're too cool to actually construct things
OpenGL();
~OpenGL();
};
}
#else
namespace OpenXcom { class OpenGL {}; }
#endif
↑ V690 The 'Surface' class implements a copy constructor, but lacks the copy assignment operator. It is dangerous to use such a class.