#pragma once /* Class:OGLRenderer Author:Rich Davison Description:Abstract base class for the graphics tutorials. Creates an OpenGL 3.2+ CORE PROFILE rendering context. Each lesson will create a renderer that inherits from this class - so all context creation is handled automatically, but students still get to see HOW such a context is created. -_-_-_-_-_-_-_,------, _-_-_-_-_-_-_-| /\_/\ NYANYANYAN -_-_-_-_-_-_-~|__( ^ .^) / _-_-_-_-_-_-_-"" "" */ #include "Common.h" #include #include #include #include "KHR\khrplatform.h" #include "glad\glad.h" #include "GL/GL.h" #include "KHR/WGLext.h" #include "SOIL/SOIL.h" #include "Vector4.h" #include "Vector3.h" #include "Vector2.h" #include "Quaternion.h" #include "Matrix4.h" #include "Window.h" #include "Shader.h" #include "Mesh.h" using std::vector; #define OPENGL_DEBUGGING extern const Matrix4 biasMatrix; class Shader; class Light; class OGLRenderer { public: friend class Window; OGLRenderer(Window &parent); virtual ~OGLRenderer(void); virtual void RenderScene() = 0; virtual void UpdateScene(float msec); void SwapBuffers(); bool HasInitialised() const; protected: virtual void Resize(int x, int y); void UpdateShaderMatrices(); void BindShader(Shader*s); void StartDebugGroup(const std::string& s) { glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, (GLsizei)s.length(), s.c_str()); } void EndDebugGroup() { glPopDebugGroup(); } void SetTextureRepeating(GLuint target, bool state); void SetShaderLight(const Light& l); Matrix4 projMatrix; //Projection matrix Matrix4 modelMatrix; //Model matrix. NOT MODELVIEW Matrix4 viewMatrix; //View matrix Matrix4 textureMatrix; //Texture matrix Matrix4 shadowMatrix; int width; //Render area width (not quite the same as window width) int height; //Render area height (not quite the same as window height) bool init; //Did the renderer initialise properly? Shader* currentShader; private: HDC deviceContext; //...Device context? HGLRC renderContext; //Permanent Rendering Context #ifdef _DEBUG static void CALLBACK DebugCallback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* userParam); #endif };