Simple app not working

Hello!

This simple app is a rewritten NeHe's example. But it doesn't show anything. What am I doing wrong?
When the app starts-up, the window's title changes from "OpenTK Game Window" to the given name. Is that a bug or a feature?

using System;
using OpenTK;
using OpenTK.Graphics.OpenGL;
using OpenTK.Input;
using OpenTK.Platform;

namespace OpenGLProject
{
    class MainWindow : GameWindow
    {
        public MainWindow()
            : base("OpenGL Project", 800, 600)
        {
            Keyboard.KeyDown += KeyDownHandler;
            Keyboard.KeyUp += KeyUpHandler;
        }

        public override void OnUpdateFrame(UpdateFrameEventArgs e)
        {
            // logic
        }
       
        public override void OnRenderFrame(RenderFrameEventArgs e)
        {
            // drawing
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
            GL.LoadIdentity();

            GL.Color3(1, 1, 1);

            GL.Translate(-1.5f, 0.0f, -6.0f);
            GL.Begin(BeginMode.Triangles);              // Drawing Using Triangles
            GL.Vertex3(0.0f, 1.0f, 0.0f);                               // Top
            GL.Vertex3(-1.0f, -1.0f, 0.0f);                             // Bottom Left
            GL.Vertex3(1.0f, -1.0f, 0.0f);                              // Bottom Right
            GL.End();
           
            GL.Translate(3.0f, 0.0f, 0.0f);                     // Move Right 3 Units
            GL.Begin(BeginMode.Quads);                                  // Draw A Quad
            GL.Vertex3(-1.0f, 1.0f, 0.0f);                              // Top Left
            GL.Vertex3(1.0f, 1.0f, 0.0f);                               // Top Right
            GL.Vertex3(1.0f, -1.0f, 0.0f);                              // Bottom Right
            GL.Vertex3(-1.0f, -1.0f, 0.0f);                             // Bottom Left
            GL.End();   

            this.SwapBuffers();
        }

        // key handlers

        public void KeyDownHandler(KeyboardDevice sender, Key key)
        {
        }

        public void KeyUpHandler(KeyboardDevice sender, Key key)
        {
        }

        public new void Run()
        {
            this.Run(25, 0);
        }

        // load and resize handlers

        public override void OnLoad(EventArgs e)
        {
            GL.ShadeModel(ShadingModel.Smooth);
            GL.ClearColor(0, 0, 0, 0);
            GL.ClearDepth(1);
            GL.Enable(EnableCap.DepthTest);
            GL.DepthFunc(DepthFunction.Lequal);
            GL.Hint(HintTarget.PerspectiveCorrectionHint, HintMode.Nicest);
        }

        protected override void OnResize(ResizeEventArgs e)
        {
            int myWidth = Width;
            if (myWidth == 0)
                myWidth = 1;

            GL.Viewport(0, 0, myWidth, Height);

            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();

            Glu.Perspective(45.0, myWidth * 1.0 / Height, 0.1, 100.0);

            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();
        }
    }
}


Comments

Re: Simple app not working
posted by Inertia

GL.Color3(1, 1, 1);

change the '1' either into '1f', '1.0f' or '1.0', else C# will select the byte/int overload where '1' is almost pitch black.

In the OnResize override you might want to compare Height vs. 0 rather than width, to prevent a possible divide by 0.

Glu.Perspective(45.0, Width / (double) myHeight, 0.1, 100.0);

If that doesn't help, check your 2 GL.Clear* calls which overload is selected there, I've never tried to feed them with anything but floating point numbers so not sure if there actually exist integer overloads ;)

Thanks! Um, I was rewriting the code too carelessly, hence the width/height thing. But the byte overload catch was tricky.

Re: Simple app not working
posted by Inertia

You're welcome, hope that fixed it :)