/// <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]); } } }
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); } }
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); }
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 *"); }