예제 #1
0
        /// <summary>
        ///
        /// </summary>
        public void InitializeExtensions()
        {
            if (extensionList == null)
            {
                GlExtensionLoader.LoadAllExtensions();

                // get the OpenGL version string and vendor name
                glVersion = Marshal.PtrToStringAnsi(Gl.glGetString(Gl.GL_VERSION));
                videoCard = Marshal.PtrToStringAnsi(Gl.glGetString(Gl.GL_RENDERER));
                vendor    = Marshal.PtrToStringAnsi(Gl.glGetString(Gl.GL_VENDOR));

                // parse out the first piece of the vendor string if there are spaces in it
                if (vendor.IndexOf(" ") != -1)
                {
                    vendor = vendor.Substring(0, vendor.IndexOf(" "));
                }

                // create a new extension list
                extensionList = new StringCollection();

                string   allExt   = Marshal.PtrToStringAnsi(Gl.glGetString(Gl.GL_EXTENSIONS));
                string[] splitExt = allExt.Split(Char.Parse(" "));

                // store the parsed extension list
                for (int i = 0; i < splitExt.Length; i++)
                {
                    extensionList.Add(splitExt[i]);
                }
            }
        }
예제 #2
0
        public void Bind()
        {
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, textureID);

            if (GlExtensionLoader.IsExtensionSupported("GL_EXT_texture_filter_anisotropic"))
            {
                float anistropicFiltering = 0.0f;
                Gl.glGetFloatv(Gl.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, out anistropicFiltering);
                Gl.glTexParameterf(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAX_ANISOTROPY_EXT, anistropicFiltering);
            }

            if (textureFilter == TextureFilter.Nearest)
            {
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_NEAREST);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_NEAREST);
            }
            else if (textureFilter == TextureFilter.Linear)
            {
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            }
            else
            {
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR_MIPMAP_LINEAR);
            }
        }
예제 #3
0
        public virtual void ExposeEvent(object sender, ExposeEventArgs args)
        {
            view.Glx.MakeCurrent(view.GdkWindow);
            Gl.glEnable(Gl.GL_CONVOLUTION_2D);
            Gdk.Color c = view.Style.Background(view.State);
            Gl.glClearColor(c.Red / (float)ushort.MaxValue,
                            c.Blue / (float)ushort.MaxValue,
                            c.Green / (float)ushort.MaxValue,
                            1.0f);

            if (texture == null)
            {
                float [] kernel = new float [] { .25f, .5f, .25f,
                                                 .5f, 1f, .5f,
                                                 .25f, .5f, .25f };

#if false
                bool supported = GlExtensionLoader.LoadExtension("GL_ARB_imaging");
                if (!supported)
                {
                    System.Console.WriteLine("GL_ARB_imaging not supported");
                    return;
                }
#else
                GlExtensionLoader.LoadAllExtensions();
#endif

                Gl.glConvolutionParameteri(Gl.GL_CONVOLUTION_2D,
                                           Gl.GL_CONVOLUTION_BORDER_MODE,
                                           Gl.GL_REPLICATE_BORDER);

                Gl.glConvolutionFilter2D(Gl.GL_CONVOLUTION_2D,
                                         Gl.GL_INTENSITY,
                                         3,
                                         3,
                                         Gl.GL_INTENSITY,
                                         Gl.GL_FLOAT,
                                         kernel);

                texture = new Texture(view.CompletePixbuf());
            }

            Gl.glShadeModel(Gl.GL_FLAT);

            Gl.glColor3f(1.0f, 1.0f, 1.0f);

            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glEnable(Gl.GL_NORMALIZE);
            Gl.glShadeModel(Gl.GL_FLAT);
            Gl.glEnable(Gl.GL_TEXTURE_RECTANGLE_ARB);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);



            transition.Draw(view.Allocation, texture, texture);

            view.Glx.SwapBuffers(view.GdkWindow);
            args.RetVal = true;
            Gl.glDisable(Gl.GL_CONVOLUTION_2D);
        }
            public override void Draw(Gdk.Rectangle viewport, Texture previous, Texture next)
            {
                for (int i = 0; i < color.Length; i++)
                {
                    color [i] = percent;
                }

                bool supported = GlExtensionLoader.LoadExtension("GL_ARB_multitexture");

                if (!supported)
                {
                    System.Console.WriteLine("GL_ARB_multitexture not supported");
                    return;
                }

                Gl.glViewport(0, 0, viewport.Width, viewport.Height);
                Gl.glMatrixMode(Gl.GL_PROJECTION);
                Gl.glLoadIdentity();
                Glu.gluOrtho2D(0, viewport.Width, 0, viewport.Height);
                Gl.glMatrixMode(Gl.GL_MODELVIEW);
                Gl.glLoadIdentity();

                Gl.glDisable(Gl.GL_TEXTURE_RECTANGLE_ARB);
                Gl.glActiveTextureARB(Gl.GL_TEXTURE0);
                Gl.glEnable(Gl.GL_TEXTURE_RECTANGLE_ARB);

                //Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_REPLACE);
                next.Bind();
                Fit(viewport, next);

                Gl.glActiveTextureARB(Gl.GL_TEXTURE1);
                //Gl.glDisable (Gl.GL_TEXTURE_RECTANGLE_ARB);
                Gl.glEnable(Gl.GL_TEXTURE_RECTANGLE_ARB);

                previous.Bind();
                Fit(viewport, previous);

                Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_COMBINE);
                Gl.glTexEnvf(Gl.GL_TEXTURE_ENV, Gl.GL_COMBINE_RGB, Gl.GL_INTERPOLATE);
                Gl.glTexEnvfv(Gl.GL_TEXTURE_ENV,
                              Gl.GL_TEXTURE_ENV_COLOR,
                              color);

                Gl.glMatrixMode(Gl.GL_MODELVIEW);

                Gl.glBegin(Gl.GL_QUADS);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE0, 0, 0);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE1, 0, 0);
                Gl.glVertex3f(0, viewport.Height, 0);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE0, next.Width, 0);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE1, previous.Width, 0);
                Gl.glVertex3f(viewport.Width, viewport.Height, 0);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE0, next.Width, next.Height);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE1, previous.Width, previous.Height);
                Gl.glVertex3f(viewport.Width, 0, 0);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE0, 0, next.Height);
                Gl.glMultiTexCoord2fARB(Gl.GL_TEXTURE1, 0, previous.Height);
                Gl.glVertex3f(0, 0, 0);
                Gl.glEnd();

                Gl.glDisable(Gl.GL_TEXTURE_RECTANGLE_ARB);
                Gl.glActiveTextureARB(Gl.GL_TEXTURE0);
            }
예제 #5
0
        public void Init()
        {
            // int bpp = pixelFormat.BitsPerPixel;

            /*
             *      Sdl.SDL_GL_SetAttribute( Sdl.SDL_GL_RED_SIZE, 5 );
             *      Sdl.SDL_GL_SetAttribute( Sdl.SDL_GL_GREEN_SIZE, 5 );
             *      Sdl.SDL_GL_SetAttribute( Sdl.SDL_GL_BLUE_SIZE, 5 );
             *      Sdl.SDL_GL_SetAttribute( Sdl.SDL_GL_DEPTH_SIZE, 16 );
             *      Sdl.SDL_GL_SetAttribute( Sdl.SDL_GL_DOUBLEBUFFER, 1 );
             *
             *      Sdl.SDL_WM_SetIcon(Sdl.SDL_LoadBMP("osmpico32.bmp"), null );
             *      if( Sdl.SDL_SetVideoMode( iWindowWidth, iWindowHeight, bpp, Sdl.SDL_OPENGL | Sdl.SDL_HWSURFACE | Sdl.SDL_DOUBLEBUF ) == IntPtr.Zero )
             *      {
             *          Console.WriteLine(  "Video mode set failed: " + Sdl.SDL_GetError().ToString() ); // Console.WriteLine
             *          return;
             *      }
             *
             *      Sdl.SDL_WM_SetCaption( WindowName, "" );
             */
            //iWindowWidth = Sdl.GetScreenWidth();
            //iWindowHeight = Sdl.GetScreenHeight();

            outerwindowwidth  = Config.GetInstance().windowwidth;
            outerwindowheight = Config.GetInstance().windowheight;

            LogFile.GetInstance().WriteLine("requested window width/height: " + outerwindowwidth.ToString() + " " + OuterWindowHeight.ToString()); // Console.WriteLine

            Video.SetVideoModeWindowOpenGL(outerwindowwidth, outerwindowheight);
            //Video.SetVideoModeOpenGL(iWindowWidth, WindowHeight, FullScreenBitsPerPixel);

            string extensions = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(Gl.glGetString(Gl.GL_EXTENSIONS));

            LogFile.GetInstance().WriteLine(extensions);

            if (extensions.IndexOf("GL_ARB_multitexture") >= 0)
            {
                GlExtensionLoader.LoadExtension("GL_ARB_multitexture");           // Is Multitexturing Supported?
                Gl.glGetIntegerv(Gl.GL_MAX_TEXTURE_UNITS_ARB, out MaxTexelUnits);
                LogFile.GetInstance().WriteLine("max texel units: " + MaxTexelUnits);
                Multitexturing = true;
            }

            LogFile.GetInstance().WriteLine(Marshal.PtrToStringAnsi(Gl.glGetString(Gl.GL_VERSION)));

            Video.WindowCaption = WindowName;

            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

            Gl.glEnable(Gl.GL_DEPTH_TEST);
            //Gl.glEnable(Gl.GL_TEXTURE_2D);
            Gl.glEnable(Gl.GL_CULL_FACE);

            Gl.glEnable(Gl.GL_LIGHTING);
            Gl.glEnable(Gl.GL_LIGHT0);

            //Gl.glShadeModel(Gl.GL_SMOOTH);

            Reshape(outerwindowwidth, outerwindowheight);

            float[] ambientLight  = new float[] { 0.4f, 0.4f, 0.4f, 1.0f };
            float[] diffuseLight  = new float[] { 0.6f, 0.6f, 0.6f, 1.0f };
            float[] specularLight = new float[] { 0.2f, 0.2f, 0.2f, 1.0f };
            float[] position      = new float[] { -1.0f, 0.2f, -0.4f, 1.0f };

            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_AMBIENT, ambientLight);
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_DIFFUSE, diffuseLight);
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_SPECULAR, specularLight);
            Gl.glLightfv(Gl.GL_LIGHT0, Gl.GL_POSITION, position);

            /*
             *
             * Gl.glLoadIdentity();
             *
             * Gl.glMatrixMode( Gl.GL_PROJECTION );
             * Gl.glLoadIdentity();
             * float aspect = (float)iWindowWidth / (float)iWindowHeight;
             * Glu.gluPerspective( 45.0, aspect, 0.5, 100.0 );
             *
             * Gl.glMatrixMode( Gl.GL_MODELVIEW );
             * Gl.glViewport (0, 0, iWindowWidth, iWindowHeight);
             *
             */
            Events.Quit            += new QuitEventHandler(this.Quit);
            Events.MouseMotion     += new MouseMotionEventHandler(this._MouseMotion);
            Events.MouseButtonDown += new MouseButtonEventHandler(Events_MouseButtonDown);
            Events.MouseButtonUp   += new MouseButtonEventHandler(Events_MouseButtonUp);
            Events.KeyboardDown    += new KeyboardEventHandler(this._KeyDown);
            Events.KeyboardUp      += new KeyboardEventHandler(this._KeyUp);

            LogFile.GetInstance().WriteLine("* Renderer initialization finished *");
        }