Jump to page: 1 2
Thread overview
DerelictGL program draw nothing
Sep 03, 2012
Zhenya
Sep 03, 2012
cal
Sep 03, 2012
Zhenya
Sep 03, 2012
cal
Sep 03, 2012
cal
Sep 03, 2012
Zhenya
Sep 03, 2012
cal
Sep 03, 2012
Ivan Agafonov
Sep 03, 2012
Zhenya
Sep 04, 2012
Zhenya
Sep 04, 2012
Ivan Agafonov
Sep 04, 2012
Zhenya
September 03, 2012
Why this simple program don't show white square?

import std.stdio;

import derelict.opengl3.gl;
import derelict.glfw3.glfw3;

const uint width = 200;
const uint height = 200;

void init()
{
	glViewport(0,0,width,height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-width,width,-height,height,-1,1);
	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_POLYGON);
		glVertex2d(0,0);
		glVertex2d(0,height);
		glVertex2d(width,height);
		glVertex2d(height,0);
	glEnd();
}

void main()
{
	DerelictGL.load();
	DerelictGLFW3.load();
	glfwInit();
	GLFWwindow window;
	window = glfwCreateWindow(width,height,GLFW_WINDOWED,"Hello DerelictGLFW3",null);
	init();
	bool opened = true;
	while(opened)
	{
		opened = !glfwGetWindowParam(window,GLFW_CLOSE_REQUESTED) && !glfwGetKey(window,GLFW_KEY_ESC);
		display();
		glfwSwapBuffers(window);
		glfwWaitEvents();
	}
	glfwTerminate();
}

September 03, 2012
On Monday, 3 September 2012 at 15:21:59 UTC, Zhenya wrote:
> Why this simple program don't show white square?
> void display()
> {
> 	glClear(GL_COLOR_BUFFER_BIT);
> 	glBegin(GL_POLYGON);
> 		glVertex2d(0,0);
> 		glVertex2d(0,height);
> 		glVertex2d(width,height);
> 		glVertex2d(height,0);        <<<<<<<< glVertex2d(width, 0)
> 	glEnd();
> }

If that doesn't work, maybe you need to wind the vertices the other way to avoid backface culling, ie:

glVertex2d(0, 0)
glVertex2d(width, 0)
glVertex2d(width, height)
glVertex2d(0, height)

September 03, 2012
On Monday, 3 September 2012 at 16:57:08 UTC, cal wrote:
> On Monday, 3 September 2012 at 15:21:59 UTC, Zhenya wrote:
>> Why this simple program don't show white square?
>> void display()
>> {
>> 	glClear(GL_COLOR_BUFFER_BIT);
>> 	glBegin(GL_POLYGON);
>> 		glVertex2d(0,0);
>> 		glVertex2d(0,height);
>> 		glVertex2d(width,height);
>> 		glVertex2d(height,0);        <<<<<<<< glVertex2d(width, 0)
>> 	glEnd();
>> }
>
> If that doesn't work, maybe you need to wind the vertices the other way to avoid backface culling, ie:
>
> glVertex2d(0, 0)
> glVertex2d(width, 0)
> glVertex2d(width, height)
> glVertex2d(0, height)

that dosn't work
September 03, 2012
On Monday, 3 September 2012 at 17:02:46 UTC, Zhenya wrote:
> that dosn't work

How large is your window?

glViewport(0,0,width,height);

should really be setting to the window size - so if you make your window 800,800, this should be

glViewport(0,0,800,800);

September 03, 2012
On Monday, 3 September 2012 at 17:08:55 UTC, cal wrote:
> On Monday, 3 September 2012 at 17:02:46 UTC, Zhenya wrote:
>> that dosn't work
>
> How large is your window?
>
> glViewport(0,0,width,height);
>
> should really be setting to the window size - so if you make your window 800,800, this should be
>
> glViewport(0,0,800,800);

Just saw it, never mind. Also, I think before you draw, you need to set the matrix mode to modelview, and load identity...

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
display();

September 03, 2012
On Monday, 3 September 2012 at 17:12:04 UTC, cal wrote:
> On Monday, 3 September 2012 at 17:08:55 UTC, cal wrote:
>> On Monday, 3 September 2012 at 17:02:46 UTC, Zhenya wrote:
>>> that dosn't work
>>
>> How large is your window?
>>
>> glViewport(0,0,width,height);
>>
>> should really be setting to the window size - so if you make your window 800,800, this should be
>>
>> glViewport(0,0,800,800);
>
> Just saw it, never mind. Also, I think before you draw, you need to set the matrix mode to modelview, and load identity...
>
> glMatrixMode(GL_MODELVIEW);
> glLoadIdentity();
> display();

const uint width = 200;
const uint height = 200;

> glMatrixMode(GL_MODELVIEW);
> glLoadIdentity();
> display();

I added it to this code,but nothing changed(
September 03, 2012
On Monday, 3 September 2012 at 17:16:54 UTC, Zhenya wrote:
> I added it to this code,but nothing changed(

Its a puzzler then, FWIW the following code works for me (I don't use GLFW, I have my own window routines, but the opengl-specific calls are the same).

Window("window1", WindowState(0,0,200,200), Flag!"Create".yes, Flag!"Show".yes);
Window.makeCurrent("window1");

glViewport(0,0,200,200);
glClearColor(0,0,0,1);

bool finish = false;
while (!finish)
{
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(-200, 200, -200, 200, -1, 1);
        glClear( GL_COLOR_BUFFER_BIT );
        glBegin(GL_POLYGON);
            glVertex2d(0, 0);
            glVertex2d(0, 200);
            glVertex2d(200, 200);
            glVertex2d(200, 0);
        glEnd();
        Window().swapBuffers();

        if (Window().keyState().keys[KEY.KC_ESCAPE])
            finish = true;
}

Perhaps something in the GLFW init is modyfying some OpenGL defaults or something, you might like to ask on their forum.
September 03, 2012
On Monday, 3 September 2012 at 15:21:59 UTC, Zhenya wrote:
> Why this simple program don't show white square?
>
> import std.stdio;
>
> import derelict.opengl3.gl;
> import derelict.glfw3.glfw3;
>
> const uint width = 200;
> const uint height = 200;
>
> void init()
> {
> 	glViewport(0,0,width,height);
> 	glMatrixMode(GL_PROJECTION);
> 	glLoadIdentity();
> 	glOrtho(-width,width,-height,height,-1,1);
> 	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
> }
>
> void display()
> {
> 	glClear(GL_COLOR_BUFFER_BIT);
> 	glBegin(GL_POLYGON);
> 		glVertex2d(0,0);
> 		glVertex2d(0,height);
> 		glVertex2d(width,height);
> 		glVertex2d(height,0);
> 	glEnd();
> }
>
> void main()
> {
> 	DerelictGL.load();
> 	DerelictGLFW3.load();
> 	glfwInit();
> 	GLFWwindow window;
> 	window = glfwCreateWindow(width,height,GLFW_WINDOWED,"Hello DerelictGLFW3",null);
> 	init();
> 	bool opened = true;
> 	while(opened)
> 	{
> 		opened = !glfwGetWindowParam(window,GLFW_CLOSE_REQUESTED) && !glfwGetKey(window,GLFW_KEY_ESC);
> 		display();
> 		glfwSwapBuffers(window);
> 		glfwWaitEvents();
> 	}
> 	glfwTerminate();
> }

width and height must be int, not uint.
After window = glfwCreateWindow();
put glfwMakeContextCurrent(window);
And it will work!
September 03, 2012
On Monday, 3 September 2012 at 18:47:25 UTC, Ivan Agafonov wrote:
> On Monday, 3 September 2012 at 15:21:59 UTC, Zhenya wrote:
>> Why this simple program don't show white square?
>>
>> import std.stdio;
>>
>> import derelict.opengl3.gl;
>> import derelict.glfw3.glfw3;
>>
>> const uint width = 200;
>> const uint height = 200;
>>
>> void init()
>> {
>> 	glViewport(0,0,width,height);
>> 	glMatrixMode(GL_PROJECTION);
>> 	glLoadIdentity();
>> 	glOrtho(-width,width,-height,height,-1,1);
>> 	glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
>> }
>>
>> void display()
>> {
>> 	glClear(GL_COLOR_BUFFER_BIT);
>> 	glBegin(GL_POLYGON);
>> 		glVertex2d(0,0);
>> 		glVertex2d(0,height);
>> 		glVertex2d(width,height);
>> 		glVertex2d(height,0);
>> 	glEnd();
>> }
>>
>> void main()
>> {
>> 	DerelictGL.load();
>> 	DerelictGLFW3.load();
>> 	glfwInit();
>> 	GLFWwindow window;
>> 	window = glfwCreateWindow(width,height,GLFW_WINDOWED,"Hello DerelictGLFW3",null);
>> 	init();
>> 	bool opened = true;
>> 	while(opened)
>> 	{
>> 		opened = !glfwGetWindowParam(window,GLFW_CLOSE_REQUESTED) && !glfwGetKey(window,GLFW_KEY_ESC);
>> 		display();
>> 		glfwSwapBuffers(window);
>> 		glfwWaitEvents();
>> 	}
>> 	glfwTerminate();
>> }
>
> width and height must be int, not uint.
> After window = glfwCreateWindow();
> put glfwMakeContextCurrent(window);
> And it will work!
Thank you very much)


September 04, 2012
But why it doesn't convert uint to int correctly?
« First   ‹ Prev
1 2