mirror of https://github.com/buggins/dlangui.git
Example1 OpenGL drawable with Old API (glBegin...) - GLGears
This commit is contained in:
parent
07f8ec9127
commit
809794d15a
|
@ -925,15 +925,54 @@ static if (ENABLE_OPENGL) {
|
||||||
import derelict.opengl3.gl3;
|
import derelict.opengl3.gl3;
|
||||||
import derelict.opengl3.gl;
|
import derelict.opengl3.gl;
|
||||||
|
|
||||||
class MyOpenglWidget : Widget {
|
class MyOpenglWidget : VerticalLayout {
|
||||||
this() {
|
this() {
|
||||||
super("OpenGLView");
|
super("OpenGLView");
|
||||||
layoutWidth = FILL_PARENT;
|
layoutWidth = FILL_PARENT;
|
||||||
layoutHeight = FILL_PARENT;
|
layoutHeight = FILL_PARENT;
|
||||||
|
alignment = Align.Center;
|
||||||
backgroundDrawable = DrawableRef(new OpenGLDrawable(&doDraw));
|
backgroundDrawable = DrawableRef(new OpenGLDrawable(&doDraw));
|
||||||
|
// add some UI on top of OpenGL drawable
|
||||||
|
Widget w = parseML(q{
|
||||||
|
VerticalLayout {
|
||||||
|
margins: 40
|
||||||
|
padding: 40
|
||||||
|
alignment: center
|
||||||
|
|
||||||
|
//backgroundColor: "#C0E0E070" // semitransparent yellow background
|
||||||
|
// red bold text with size = 150% of base style size and font face Arial
|
||||||
|
TextWidget { text: "Hello World example for DlangUI"; 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" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HorizontalLayout {
|
||||||
|
Button { id: btnOk; text: "Ok" }
|
||||||
|
Button { id: btnCancel; text: "Cancel" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
addChild(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _initCalled;
|
bool _oldApi;
|
||||||
|
|
||||||
private void doDraw(DrawBuf buf, Rect rc) {
|
private void doDraw(DrawBuf buf, Rect rc) {
|
||||||
Log.v("GlGears: MyOpenglWidget.doDraw() draw gears");
|
Log.v("GlGears: MyOpenglWidget.doDraw() draw gears");
|
||||||
|
@ -941,25 +980,49 @@ static if (ENABLE_OPENGL) {
|
||||||
Log.v("GlGears: OpenGL is disabled");
|
Log.v("GlGears: OpenGL is disabled");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!glLightfv) {
|
_oldApi = !!glLightfv;
|
||||||
Log.v("GlGears: GL context doesn't support old OpenGL API");
|
if (_oldApi) {
|
||||||
// TODO: use some new api code?
|
drawUsingOldAPI(rc);
|
||||||
return;
|
} else {
|
||||||
}
|
drawUsingNewAPI(rc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawUsingOldAPI(Rect rc) {
|
||||||
|
static bool _initCalled;
|
||||||
if (!_initCalled) {
|
if (!_initCalled) {
|
||||||
Log.d("GlGears: calling init()");
|
Log.d("GlGears: calling init()");
|
||||||
_initCalled = true;
|
_initCalled = true;
|
||||||
init();
|
glxgears_init();
|
||||||
}
|
}
|
||||||
Log.v("GlGears: calling reshape()");
|
Log.v("GlGears: calling reshape()");
|
||||||
reshape(rc.width, rc.height);
|
glxgears_reshape(rc);
|
||||||
Log.v("GlGears: calling draw()");
|
Log.v("GlGears: calling draw()");
|
||||||
draw();
|
glEnable(GL_LIGHTING);
|
||||||
|
glEnable(GL_LIGHT0);
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glxgears_draw();
|
||||||
|
glDisable(GL_LIGHTING);
|
||||||
|
glDisable(GL_LIGHT0);
|
||||||
|
glDisable(GL_DEPTH_TEST);
|
||||||
|
}
|
||||||
|
void drawUsingNewAPI(Rect rc) {
|
||||||
|
}
|
||||||
|
/// 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) {
|
||||||
|
// rotate gears
|
||||||
|
angle += interval * 0.000005f;
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
invalidate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Sample project for old API: GlxGears
|
||||||
|
|
||||||
import std.math;
|
import std.math;
|
||||||
static __gshared GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
|
static __gshared GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
|
||||||
|
@ -1106,9 +1169,9 @@ static if (ENABLE_OPENGL) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void draw()
|
static void glxgears_draw()
|
||||||
{
|
{
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(/*GL_COLOR_BUFFER_BIT | */GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glRotatef(view_rotx, 1.0, 0.0, 0.0);
|
glRotatef(view_rotx, 1.0, 0.0, 0.0);
|
||||||
|
@ -1139,11 +1202,12 @@ static if (ENABLE_OPENGL) {
|
||||||
|
|
||||||
/* new window size or exposure */
|
/* new window size or exposure */
|
||||||
static void
|
static void
|
||||||
reshape(int width, int height)
|
glxgears_reshape(Rect rc)
|
||||||
{
|
{
|
||||||
GLfloat h = cast(GLfloat) height / cast(GLfloat) width;
|
GLfloat h = cast(GLfloat) rc.height / cast(GLfloat) rc.width;
|
||||||
|
|
||||||
glViewport(0, 0, cast(GLint) width, cast(GLint) height);
|
glViewport(rc.top, rc.left, cast(GLint)rc.width, cast(GLint)rc.height);
|
||||||
|
//glViewport(0, 0, cast(GLint) width, cast(GLint) height);
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
|
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
|
||||||
|
@ -1153,7 +1217,7 @@ static if (ENABLE_OPENGL) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void init()
|
static void glxgears_init()
|
||||||
{
|
{
|
||||||
static GLfloat[4] pos = [ 5.0, 5.0, 10.0, 0.0 ];
|
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] red = [ 0.8, 0.1, 0.0, 1.0 ];
|
||||||
|
|
Loading…
Reference in New Issue