From 94fd203676b3897cbcaa6289b71f0fae15974070 Mon Sep 17 00:00:00 2001 From: Grim Maple Date: Fri, 23 Dec 2022 15:34:58 +0300 Subject: [PATCH] Move OpenGL example to Example1 --- dub.json | 1 - examples/example1/dub.json | 4 +- examples/example1/src/example1.d | 353 +--------- .../src/widgets/opengl.d} | 43 +- examples/example1/src/widgets/package.d | 1 + .../views/res/mdpi/crate.png | Bin examples/example1/views/resources.list | 1 + examples/opengl/dub.json | 34 - examples/opengl/opengl-monod-osx.dproj | 90 --- examples/opengl/opengl-msvc.visualdproj | 618 ------------------ examples/opengl/views/res/mdpi/tx_fabric.jpg | Bin 9061 -> 0 bytes examples/opengl/views/resources.list | 2 - 12 files changed, 10 insertions(+), 1137 deletions(-) rename examples/{opengl/src/openglexample.d => example1/src/widgets/opengl.d} (93%) rename examples/{opengl => example1}/views/res/mdpi/crate.png (100%) delete mode 100644 examples/opengl/dub.json delete mode 100644 examples/opengl/opengl-monod-osx.dproj delete mode 100644 examples/opengl/opengl-msvc.visualdproj delete mode 100644 examples/opengl/views/res/mdpi/tx_fabric.jpg delete mode 100644 examples/opengl/views/resources.list diff --git a/dub.json b/dub.json index 1c33d003..40125eb5 100644 --- a/dub.json +++ b/dub.json @@ -42,7 +42,6 @@ "./examples/d3d/", "./examples/dminer/", "./examples/tetris/", - "./examples/opengl/", "./examples/ircclient/", "./examples/spreadsheet/", "./examples/dragon/" diff --git a/examples/example1/dub.json b/examples/example1/dub.json index 47c89e33..8853dcb6 100644 --- a/examples/example1/dub.json +++ b/examples/example1/dub.json @@ -11,7 +11,7 @@ "stringImportPaths": ["views", "views/res", "views/res/i18n", "views/res/mdpi"], - "versions": ["ForceLogs"], + "versions": ["ForceLogs", "GL_AllowDeprecated"], "dependencies": { "dlangui": {"path": "../../"} @@ -19,7 +19,7 @@ "configurations" : [ { "name" : "default" - }, + }, { "name" : "console", "subConfigurations" : { diff --git a/examples/example1/src/example1.d b/examples/example1/src/example1.d index 380e0d5e..0340e3bc 100644 --- a/examples/example1/src/example1.d +++ b/examples/example1/src/example1.d @@ -1064,7 +1064,7 @@ void main() static if (BACKEND_GUI && ENABLE_OPENGL) { - tabs.addTab(new MyOpenglWidget(), "OpenGL"d); + tabs.addTab(new OpenGLExample(), "OpenGL"d); } //========================================================================== @@ -1089,354 +1089,3 @@ void main() return Platform.instance.enterMessageLoop(); } - -static if (ENABLE_OPENGL) { - - import bindbc.opengl; - - class MyOpenglWidget : VerticalLayout { - this() { - super("OpenGLView"); - layoutWidth = FILL_PARENT; - layoutHeight = FILL_PARENT; - alignment = Align.Center; - // add some UI on top of OpenGL drawable - Widget w = parseML(q{ - VerticalLayout { - alignment: center - layoutWidth: fill; layoutHeight: fill - // background for window - tiled texture - backgroundImageId: "tx_fabric.tiled" - VerticalLayout { - // child widget - will draw using OpenGL here - id: glView - margins: 20 - padding: 20 - layoutWidth: fill; layoutHeight: fill - - //backgroundColor: "#C0E0E070" // semitransparent yellow background - // red bold text with size = 150% of base style size and font face Arial - TextWidget { text: "Some controls to draw on top of OpenGL scene"; textColor: "red"; fontSize: 150%; fontWeight: 800; fontFace: "Arial" } - // arrange controls as form - table with two columns - TableLayout { - colCount: 2 - TextWidget { text: "param 1" } - EditLine { id: edit1; text: "some text" } - TextWidget { text: "param 2" } - EditLine { id: edit2; text: "some text for param2" } - TextWidget { text: "some radio buttons" } - // arrange some radio buttons vertically - VerticalLayout { - RadioButton { id: rb1; text: "Item 1" } - RadioButton { id: rb2; text: "Item 2" } - RadioButton { id: rb3; text: "Item 3" } - } - TextWidget { text: "and checkboxes" } - // arrange some checkboxes horizontally - HorizontalLayout { - CheckBox { id: cb1; text: "checkbox 1" } - CheckBox { id: cb2; text: "checkbox 2" } - } - } - VSpacer { layoutWeight: 10 } - HorizontalLayout { - Button { id: btnOk; text: "Ok" } - Button { id: btnCancel; text: "Cancel" } - } - } - } - }); - // setting OpenGL background drawable for one of child widgets - w.childById("glView").backgroundDrawable = DrawableRef(new OpenGLDrawable(&doDraw)); - addChild(w); - } - - bool _oldApi; - - /// this is OpenGLDrawableDelegate implementation - private void doDraw(Rect windowRect, Rect rc) { - if (!openglEnabled) { - Log.v("GlGears: OpenGL is disabled"); - return; - } - import dlangui.graphics.glsupport : glSupport; - _oldApi = glSupport.legacyMode; - if (_oldApi) { - drawUsingOldAPI(rc); - } else { - drawUsingNewAPI(rc); - } - } - - /// Legacy API example (glBegin/glEnd) - void drawUsingOldAPI(Rect rc) { - /* - static bool _initCalled; - if (!_initCalled) { - Log.d("GlGears: calling init()"); - _initCalled = true; - glxgears_init(); - } - glxgears_reshape(rc); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - glxgears_draw(); - glDisable(GL_LIGHTING); - glDisable(GL_LIGHT0); - glDisable(GL_DEPTH_TEST); - */ - } - - /// New API example (OpenGL3+, shaders) - void drawUsingNewAPI(Rect rc) { - // TODO: put some sample code here - } - /// returns true is widget is being animated - need to call animate() and redraw - @property override bool animating() { return true; } - /// animates window; interval is time left from previous draw, in hnsecs (1/10000000 of second) - override void animate(long interval) { - if (_oldApi) { - // animate legacy API example - // rotate gears - angle += interval * 0.000002f; - } else { - // TODO: animate new API example - } - invalidate(); - } - } - - static __gshared GLfloat angle = 0.0; - -version (GLLegacyAPI) { - - // Sample project for old API: GlxGears - - import std.math; - static __gshared GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0; - static __gshared GLint gear1, gear2, gear3; - alias M_PI = std.math.PI; - - /* - * - * Draw a gear wheel. You'll probably want to call this function when - * building a display list since we do a lot of trig here. - * - * Input: inner_radius - radius of hole at center - * outer_radius - radius at center of teeth - * width - width of gear - * teeth - number of teeth - * tooth_depth - depth of tooth - */ - - static void - gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width, - GLint teeth, GLfloat tooth_depth) - { - GLint i; - GLfloat r0, r1, r2; - GLfloat angle, da; - GLfloat u, v, len; - - r0 = inner_radius; - r1 = outer_radius - tooth_depth / 2.0; - r2 = outer_radius + tooth_depth / 2.0; - - da = 2.0 * M_PI / teeth / 4.0; - - glShadeModel(GL_FLAT); - - glNormal3f(0.0, 0.0, 1.0); - - /* draw front face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - if (i < teeth) { - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), - width * 0.5); - } - } - glEnd(); - - /* draw front sides of teeth */ - glBegin(GL_QUADS); - da = 2.0 * M_PI / teeth / 4.0; - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), - width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), - width * 0.5); - } - glEnd(); - - glNormal3f(0.0, 0.0, -1.0); - - /* draw back face */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - if (i < teeth) { - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), - -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - } - } - glEnd(); - - /* draw back sides of teeth */ - glBegin(GL_QUADS); - da = 2.0 * M_PI / teeth / 4.0; - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), - -width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), - -width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - } - glEnd(); - - /* draw outward faces of teeth */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i < teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - - glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5); - glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5); - u = r2 * cos(angle + da) - r1 * cos(angle); - v = r2 * sin(angle + da) - r1 * sin(angle); - len = sqrt(u * u + v * v); - u /= len; - v /= len; - glNormal3f(v, -u, 0.0); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5); - glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5); - glNormal3f(cos(angle), sin(angle), 0.0); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), - width * 0.5); - glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da), - -width * 0.5); - u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da); - v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da); - glNormal3f(v, -u, 0.0); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), - width * 0.5); - glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da), - -width * 0.5); - glNormal3f(cos(angle), sin(angle), 0.0); - } - - glVertex3f(r1 * cos(0.0), r1 * sin(0.0), width * 0.5); - glVertex3f(r1 * cos(0.0), r1 * sin(0.0), -width * 0.5); - - glEnd(); - - glShadeModel(GL_SMOOTH); - - /* draw inside radius cylinder */ - glBegin(GL_QUAD_STRIP); - for (i = 0; i <= teeth; i++) { - angle = i * 2.0 * M_PI / teeth; - glNormal3f(-cos(angle), -sin(angle), 0.0); - glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5); - glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5); - } - glEnd(); - } - - - static void glxgears_draw() - { - glClear(/*GL_COLOR_BUFFER_BIT | */GL_DEPTH_BUFFER_BIT); - - glPushMatrix(); - glRotatef(view_rotx, 1.0, 0.0, 0.0); - glRotatef(view_roty, 0.0, 1.0, 0.0); - glRotatef(view_rotz, 0.0, 0.0, 1.0); - - glPushMatrix(); - glTranslatef(-3.0, -2.0, 0.0); - glRotatef(angle, 0.0, 0.0, 1.0); - glCallList(gear1); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(3.1, -2.0, 0.0); - glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0); - glCallList(gear2); - glPopMatrix(); - - glPushMatrix(); - glTranslatef(-3.1, 4.2, 0.0); - glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0); - glCallList(gear3); - glPopMatrix(); - - glPopMatrix(); - } - - - /* new window size or exposure */ - static void - glxgears_reshape(Rect rc) - { - GLfloat h = cast(GLfloat) rc.height / cast(GLfloat) rc.width; - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); - glTranslatef(0.0, 0.0, -40.0); - } - - - static void glxgears_init() - { - static GLfloat[4] pos = [ 5.0, 5.0, 10.0, 0.0 ]; - static GLfloat[4] red = [ 0.8, 0.1, 0.0, 1.0 ]; - static GLfloat[4] green = [ 0.0, 0.8, 0.2, 1.0 ]; - static GLfloat[4] blue = [ 0.2, 0.2, 1.0, 1.0 ]; - - glLightfv(GL_LIGHT0, GL_POSITION, pos.ptr); - glEnable(GL_CULL_FACE); - glEnable(GL_LIGHTING); - glEnable(GL_LIGHT0); - glEnable(GL_DEPTH_TEST); - - /* make the gears */ - gear1 = glGenLists(1); - glNewList(gear1, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red.ptr); - gear(1.0, 4.0, 1.0, 20, 0.7); - glEndList(); - - gear2 = glGenLists(1); - glNewList(gear2, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green.ptr); - gear(0.5, 2.0, 2.0, 10, 0.7); - glEndList(); - - gear3 = glGenLists(1); - glNewList(gear3, GL_COMPILE); - glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue.ptr); - gear(1.3, 2.0, 0.5, 10, 0.7); - glEndList(); - - glEnable(GL_NORMALIZE); - } - -} -} diff --git a/examples/opengl/src/openglexample.d b/examples/example1/src/widgets/opengl.d similarity index 93% rename from examples/opengl/src/openglexample.d rename to examples/example1/src/widgets/opengl.d index 09f3a3fc..ef96b2fe 100644 --- a/examples/opengl/src/openglexample.d +++ b/examples/example1/src/widgets/opengl.d @@ -1,46 +1,13 @@ -module openglexample; - -import dlangui; - -mixin APP_ENTRY_POINT; - -/// entry point for dlangui based application -extern (C) int UIAppMain(string[] args) { - // embed resources listed in views/resources.list into executable - embeddedResourceList.addResources(embedResourcesFromList!("resources.list")()); - - // the old API example works on old context because of OpenGL deprecation model - // otherwise there will be GL_INVALID_OPERATION error - // new API functions on a modern graphics card will work even if you set context version to 1.0 - Platform.instance.GLVersionMajor = 2; - Platform.instance.GLVersionMinor = 1; - - // Enable multisampling - Platform.instance.multisamples = 16; - - // create window - Window window = Platform.instance.createWindow("DlangUI OpenGL Example", null, WindowFlag.Resizable, 800, 700); - - static if (ENABLE_OPENGL) { - window.mainWidget = new MyOpenglWidget(); - } else { - window.mainWidget = new TextWidget(null, "DlangUI is built with OpenGL support disabled"d); - } - - window.windowIcon = drawableCache.getImage("dlangui-logo1"); - - window.show(); - // run message loop - return Platform.instance.enterMessageLoop(); -} - -static if (ENABLE_OPENGL): +module widgets.opengl; import bindbc.opengl; +import dlangui; import dlangui.graphics.glsupport; import dlangui.graphics.gldrawbuf; -class MyOpenglWidget : VerticalLayout { +static if(ENABLE_OPENGL): + +class OpenGLExample : VerticalLayout { this() { super("OpenGLView"); layoutWidth = FILL_PARENT; diff --git a/examples/example1/src/widgets/package.d b/examples/example1/src/widgets/package.d index 15a03f25..0565488a 100644 --- a/examples/example1/src/widgets/package.d +++ b/examples/example1/src/widgets/package.d @@ -4,3 +4,4 @@ public import widgets.animation; public import widgets.canvas; public import widgets.charts; public import widgets.icons; +public import widgets.opengl; diff --git a/examples/opengl/views/res/mdpi/crate.png b/examples/example1/views/res/mdpi/crate.png similarity index 100% rename from examples/opengl/views/res/mdpi/crate.png rename to examples/example1/views/res/mdpi/crate.png diff --git a/examples/example1/views/resources.list b/examples/example1/views/resources.list index d05c5428..654fce4c 100644 --- a/examples/example1/views/resources.list +++ b/examples/example1/views/resources.list @@ -15,5 +15,6 @@ res/mdpi/edit-redo.png res/mdpi/edit-undo.png res/mdpi/edit-unindent.png res/mdpi/tx_fabric.jpg +res/mdpi/crate.png res/theme_custom1.xml res/blocks.png diff --git a/examples/opengl/dub.json b/examples/opengl/dub.json deleted file mode 100644 index eb31c4b2..00000000 --- a/examples/opengl/dub.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "opengl", - "description": "dlangui library OpenGL example", - "homepage": "https://github.com/buggins/dlangui", - "license": "Boost", - "authors": ["Vadim Lopatin"], - - "targetPath": "bin", - "targetType": "executable", - "targetName": "openglexample", - - "stringImportPaths": ["views", "views/res", "views/res/i18n", "views/res/mdpi"], - - "versions": ["EmbedStandardResources", "GL_AllowDeprecated"], - - "dependencies": { - "dlangui": {"path": "../../"} - }, - - "configurations": [ - { - "name": "default", - "subConfigurations": { - "dlangui": "default" - } - }, - { - "name": "x11", - "subConfigurations": { - "dlangui": "x11" - } - } - ] -} diff --git a/examples/opengl/opengl-monod-osx.dproj b/examples/opengl/opengl-monod-osx.dproj deleted file mode 100644 index 45ad8a08..00000000 --- a/examples/opengl/opengl-monod-osx.dproj +++ /dev/null @@ -1,90 +0,0 @@ - - - - Debug - x64 - {F533AB80-BD2F-4F4A-A23D-16AD24CE822A} - DMD2 - true - true - true - - - ../../src - ../../3rdparty - ../../deps/gl3n - ../../deps/DerelictGL3/source - ../../deps/DerelictSDL2/source - ../../deps/DerelictFT/source - ../../deps/DerelictUtil/source - - - - - {1CC7C43E-7B39-4AFC-A45B-F1D9F582CF6D} - - - - - true - bin\Debug - - - USE_SDL - USE_OPENGL - USE_FREETYPE - EmbedStandardResources - - - obj/Debug - true - false - opengl-monod-osx - Executable - true - 0 - -Jviews -Jviews/res -Jviews/res/i18n -Jviews/res/mdpi -Jviews/res/hdpi - - - bin\Release - - - USE_SDL - USE_OPENGL - USE_FREETYPE - EmbedStandardResources - - - obj/Release - true - false - opengl-monod-osx - Executable - true - 0 - -Jviews -Jviews/res -Jviews/res/i18n -Jviews/res/mdpi -Jviews/res/hdpi - - - true - bin\Unittest - - - USE_SDL - USE_OPENGL - USE_FREETYPE - EmbedStandardResources - - - obj/Unittest - true - true - opengl-monod-osx - Executable - true - 0 - -Jviews -Jviews/res -Jviews/res/i18n -Jviews/res/mdpi -Jviews/res/hdpi - - - - - \ No newline at end of file diff --git a/examples/opengl/opengl-msvc.visualdproj b/examples/opengl/opengl-msvc.visualdproj deleted file mode 100644 index 53c02b66..00000000 --- a/examples/opengl/opengl-msvc.visualdproj +++ /dev/null @@ -1,618 +0,0 @@ - - {29CF2CAC-2C0C-4F17-9292-E1706AC7EBBF} - - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - 0 - 0 - $(CC) -c - 1 - $(DMDInstallDir)windows\bin\dmd.exe - $(SolutionDir)/src $(SolutionDir)/3rdparty $(SolutionDir)/deps/DerelictGL3/source $(SolutionDir)/deps/DerelictUtil/source $(SolutionDir)/deps/DerelictFT/source $(SolutionDir)/deps/DerelictSDL2/source - views views/res views/res/i18n views/res/mdpi views/res/hdpi - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - USE_OPENGL EmbedStandardResources - 0 - 0 - 0 - - - - 0 - - 1 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - ole32.lib kernel32.lib user32.lib comctl32.lib comdlg32.lib - - - - $(OutDir)\$(ProjectName).exe - 1 - 2 - 0 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - 0 - 0 - $(CC) -c - 1 - $(DMDInstallDir)windows\bin\dmd.exe - $(SolutionDir)/src $(SolutionDir)/3rdparty $(SolutionDir)/deps/DerelictGL3/source $(SolutionDir)/deps/DerelictUtil/source $(SolutionDir)/deps/DerelictFT/source $(SolutionDir)/deps/DerelictSDL2/source $(SolutionDir)/deps/gl3n - views views/res views/res/i18n views/res/mdpi views/res/hdpi - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - USE_OPENGL EmbedStandardResources - 0 - 0 - 0 - - - - 0 - - 1 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - ole32.lib kernel32.lib user32.lib comctl32.lib comdlg32.lib - - - - $(OutDir)\$(ProjectName).exe - 1 - 2 - 0 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - 0 - 0 - $(CC) -c - 1 - $(DMDInstallDir)windows\bin\dmd.exe - $(SolutionDir)/src $(SolutionDir)/3rdparty $(SolutionDir)/deps/DerelictGL3/source $(SolutionDir)/deps/DerelictUtil/source $(SolutionDir)/deps/DerelictFT/source $(SolutionDir)/deps/DerelictSDL2/source - views views/res views/res/i18n views/res/mdpi views/res/hdpi - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - USE_OPENGL EmbedStandardResources - 0 - 0 - 0 - - - - 0 - - 0 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - ole32.lib kernel32.lib user32.lib comctl32.lib comdlg32.lib - - - - $(OutDir)\$(ProjectName).exe - 1 - 1 - 0 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - 0 - 0 - $(CC) -c - 1 - $(DMDInstallDir)windows\bin\dmd.exe - $(SolutionDir)/src $(SolutionDir)/3rdparty $(SolutionDir)/deps/DerelictGL3/source $(SolutionDir)/deps/DerelictUtil/source $(SolutionDir)/deps/DerelictFT/source $(SolutionDir)/deps/DerelictSDL2/source - views views/res views/res/i18n views/res/mdpi views/res/hdpi - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - USE_OPENGL EmbedStandardResources - 0 - 0 - 0 - - - - 0 - - 0 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - ole32.lib kernel32.lib user32.lib comctl32.lib comdlg32.lib - - - - $(OutDir)\$(ProjectName).exe - 1 - 1 - 0 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - 0 - 0 - $(CC) -c - 1 - $(DMDInstallDir)windows\bin\dmd.exe - $(SolutionDir)/src $(SolutionDir)/3rdparty $(SolutionDir)/deps/DerelictGL3/source $(SolutionDir)/deps/DerelictUtil/source $(SolutionDir)/deps/DerelictFT/source $(SolutionDir)/deps/DerelictSDL2/source - views views/res views/res/i18n views/res/mdpi views/res/hdpi - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - USE_OPENGL EmbedStandardResources - 0 - 0 - 0 - - - - 0 - - 1 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - ole32.lib kernel32.lib user32.lib comctl32.lib comdlg32.lib - - - - $(OutDir)\$(ProjectName).exe - 1 - 2 - 0 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - 0 - 0 - 0 - 2 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 3 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 2.043 - 0 - 0 - 0 - 0 - 0 - $(CC) -c - 1 - $(DMDInstallDir)windows\bin\dmd.exe - $(SolutionDir)/src $(SolutionDir)/3rdparty $(SolutionDir)/deps/DerelictGL3/source $(SolutionDir)/deps/DerelictUtil/source $(SolutionDir)/deps/DerelictFT/source $(SolutionDir)/deps/DerelictSDL2/source $(SolutionDir)/deps/gl3n - views views/res views/res/i18n views/res/mdpi views/res/hdpi - $(ConfigurationName) - $(OutDir) - - - 0 - - - - - 0 - - - 1 - $(IntDir)\$(TargetName).json - 0 - - 0 - USE_OPENGL EmbedStandardResources - 0 - 0 - 0 - - - - 0 - - 1 - $(VisualDInstallDir)cv2pdb\cv2pdb.exe - 0 - 0 - 0 - - - - ole32.lib kernel32.lib user32.lib comctl32.lib comdlg32.lib - - - - $(OutDir)\$(ProjectName).exe - 1 - 2 - 0 - - - - *.obj;*.cmd;*.build;*.json;*.dep - - - - - diff --git a/examples/opengl/views/res/mdpi/tx_fabric.jpg b/examples/opengl/views/res/mdpi/tx_fabric.jpg deleted file mode 100644 index 6c33894a25239d022c5ccb70598f71cd9d0fff11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9061 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 z 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 diff --git a/examples/opengl/views/resources.list b/examples/opengl/views/resources.list deleted file mode 100644 index bf609e9e..00000000 --- a/examples/opengl/views/resources.list +++ /dev/null @@ -1,2 +0,0 @@ -res/mdpi/tx_fabric.jpg -res/mdpi/crate.png