From 0556ad578128e2bd919f2cf6b73a46c377548bf4 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Mon, 21 Dec 2015 10:18:49 +0300 Subject: [PATCH] refactor setOrthoProjection, implement setPerspectiveProjection --- src/dlangui/graphics/gldrawbuf.d | 10 ++++------ src/dlangui/graphics/glsupport.d | 17 +++++++++++------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/dlangui/graphics/gldrawbuf.d b/src/dlangui/graphics/gldrawbuf.d index f7a7231c..e9f50ec7 100644 --- a/src/dlangui/graphics/gldrawbuf.d +++ b/src/dlangui/graphics/gldrawbuf.d @@ -60,7 +60,7 @@ class GLDrawBuf : DrawBuf, GLConfigCallback { override void saveConfiguration() { } override void restoreConfiguration() { - glSupport.setOrthoProjection(Rect(0, 0, _dx, _dy)); + glSupport.setOrthoProjection(Rect(0, 0, _dx, _dy), Rect(0, 0, _dx, _dy)); } /// reserved for hardware-accelerated drawing - begins drawing batch @@ -75,7 +75,7 @@ class GLDrawBuf : DrawBuf, GLConfigCallback { /// reserved for hardware-accelerated drawing - ends drawing batch override void afterDrawing() { - glSupport.setOrthoProjection(Rect(0, 0, _dx, _dy)); + glSupport.setOrthoProjection(Rect(0, 0, _dx, _dy), Rect(0, 0, _dx, _dy)); _scene.draw(); glSupport.flushGL(); destroy(_scene); @@ -923,11 +923,9 @@ public: } override void draw() { if (_handler) { - - import derelict.opengl3.gl3 : glViewport; - glViewport(_rc.left, _windowRect.height - _rc.bottom, _rc.width, _rc.height); + glSupport.setOrthoProjection(_windowRect, _rc); _handler(_windowRect, _rc); - glSupport.setOrthoProjection(_windowRect); + glSupport.setOrthoProjection(_windowRect, _windowRect); } } } diff --git a/src/dlangui/graphics/glsupport.d b/src/dlangui/graphics/glsupport.d index 1baf67ec..29b3dfce 100644 --- a/src/dlangui/graphics/glsupport.d +++ b/src/dlangui/graphics/glsupport.d @@ -979,9 +979,9 @@ class GLSupport { qtmatrix[y * 4 + x] = m[y][x]; } - void setOrthoProjection(Rect view) { - bufferDx = view.width; - bufferDy = view.height; + void setOrthoProjection(Rect windowRect, Rect view) { + bufferDx = windowRect.width; + bufferDy = windowRect.height; QMatrix4x4_ortho(view.left, view.right, view.top, view.bottom, 0.5f, 50.0f); //myGlOrtho(0, dx, 0, dy, 0.1f, 5.0f); @@ -995,11 +995,16 @@ class GLSupport { //checkgl!glPushMatrix(); glLoadIdentity(); } - checkgl!glViewport(view.left, view.top, view.right, view.bottom); + checkgl!glViewport(view.left, windowRect.height - view.bottom, view.width, view.height); } - void setPerspectiveProjection(float fieldOfView, float aspectRatio, float nearPlane, float farPlane) { - // TODO + void setPerspectiveProjection(Rect windowRect, Rect view, float fieldOfView, float nearPlane, float farPlane) { + + bufferDx = windowRect.width; + bufferDy = windowRect.height; + float aspectRatio = cast(float)view.width / cast(float)view.height; + QMatrix4x4_perspective(fieldOfView, aspectRatio, nearPlane, farPlane); + checkgl!glViewport(view.left, windowRect.height - view.bottom, view.width, view.height); } }