1 /* 2 * BSD 3-Clause License 3 * 4 * Copyright (c) 2016, Mango-Engine Team 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * * Redistributions of source code must retain the above copyright notice, this 11 * list of conditions and the following disclaimer. 12 * 13 * * Redistributions in binary form must reproduce the above copyright notice, 14 * this list of conditions and the following disclaimer in the documentation 15 * and/or other materials provided with the distribution. 16 * 17 * * Neither the name of the copyright holder nor the names of its 18 * contributors may be used to endorse or promote products derived from 19 * this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 module mango_engine.graphics.opengl.gl_renderer; 33 34 import mango_engine.game; 35 import mango_engine.exception; 36 import mango_engine.graphics.model; 37 import mango_engine.graphics.renderer; 38 import mango_engine.graphics.opengl.gl_model; 39 import mango_engine.graphics.opengl.gl_backend; 40 41 import derelict.opengl3.gl3; 42 43 class GLRenderer : Renderer { 44 // TODO: Remove renderer class? 45 46 /// Use Renderer.rendererFactory() 47 this(GameManager game) @safe { 48 super(game); 49 50 gl_check(); 51 52 setup(); 53 } 54 55 private void setup() @trusted { 56 glClearColor(0f, 100f, 0f, 0f); 57 glEnable(GL_TEXTURE_2D); 58 } 59 60 override { 61 protected void prepareRender() @system { 62 super.prepareRender(); 63 glClear(GL_COLOR_BUFFER_BIT); 64 } 65 66 protected void renderModel(shared Model model_) @system { 67 shared GLModel model = cast(shared GLModel) model_; 68 if(model is null) { 69 throw new InvalidArgumentException("Cannot render Model not of type GLModel."); 70 } 71 72 (cast(GLModel) model_).render(this); 73 } 74 75 protected void finishRender() @system { 76 super.finishRender(); 77 (cast(shared) this.game.window).updateBuffers(); 78 } 79 } 80 }