Example #1
0
        static bool arglPixelBufferDataUpload(ARGL_CONTEXT_SETTINGS contextSettings, byte[] bufDataPtr)
        {
            if (contextSettings == null)
            {
                return(false);
            }
            if (contextSettings.textureObjectsHaveBeenSetup || contextSettings.textureGeometryHasBeenSetup || contextSettings.pixSize == 0)
            {
                return(false);
            }

            GL1.ActiveTexture(All1.Texture0);
            GL1.BindTexture(All1.Texture2D, contextSettings.texture);

            GL1.PixelStore(All1.UnpackAlignment, (((contextSettings.bufSizeX * contextSettings.pixSize) & 0x3) == 0 ? 4 : 1));

            if (contextSettings.bufSizeIsTextureSize)
            {
                GL1.TexImage2D(All1.Texture2D, 0, (OpenTK.Graphics.ES11.All)contextSettings.pixIntFormat, contextSettings.textureSizeX, contextSettings.textureSizeY, 0, (All1)contextSettings.pixFormat, (All1)contextSettings.pixType, bufDataPtr);
            }
            else
            {
                // Request OpenGL allocate memory internally for a power-of-two texture of the appropriate size.
                // Then send the NPOT-data as a subimage.
                GL1.TexImage2D(All1.Texture2D, 0, (OpenTK.Graphics.ES11.All)contextSettings.pixIntFormat, contextSettings.textureSizeX, contextSettings.textureSizeY, 0, (All1)contextSettings.pixFormat, (All1)contextSettings.pixType, IntPtr.Zero);
                GL1.TexSubImage2D(All1.Texture2D, 0, 0, 0, contextSettings.bufSizeX, contextSettings.bufSizeY, (All1)contextSettings.pixFormat, (All1)contextSettings.pixType, bufDataPtr);
            }

            contextSettings.textureDataReady = true;

            return(true);
        }
Example #2
0
        // Set up the texture objects.
        static bool arglSetupTextureObjects(ARGL_CONTEXT_SETTINGS contextSettings)
        {
            int textureWrapMode;

            // Delete previous textures, unless this is our first time here.
            if (contextSettings.textureObjectsHaveBeenSetup)
            {
                GL1.ActiveTexture(All1.Texture0);
                GL1.BindTexture(All1.Texture2D, 0);
                GL1.DeleteTextures(1, ref contextSettings.texture);
                contextSettings.textureObjectsHaveBeenSetup = false;
            }

            GL1.GenTextures(1, out contextSettings.texture);
            GL1.ActiveTexture(All1.Texture0);
            GL1.BindTexture(All1.Texture2D, contextSettings.texture);
            GL1.TexParameterx(All1.Texture2D, All1.TextureMinFilter, (int)All1.Linear);
            GL1.TexParameterx(All1.Texture2D, All1.TextureMagFilter, (int)All1.Linear);
            // Decide whether we can use GL_CLAMP_TO_EDGE.
            //if (arglGLCapabilityCheck(0x0120, (unsigned char *)"GL_SGIS_texture_edge_clamp")) {
            textureWrapMode = (int)All1.ClampToEdge;
            //} else {
            //    textureWrapMode = (int)All1.Repeat;
            //}
            GL1.TexParameterx(All1.Texture2D, All1.TextureWrapS, textureWrapMode);
            GL1.TexParameterx(All1.Texture2D, All1.TextureWrapT, textureWrapMode);

            contextSettings.textureObjectsHaveBeenSetup = true;
            return(true);
        }
Example #3
0
        static void arglCleanup(ARGL_CONTEXT_SETTINGS contextSettings)
        {
            if (contextSettings == null)
            {
                return;                          // Sanity check.
            }
            if (contextSettings.textureObjectsHaveBeenSetup)
            {
                GL1.ActiveTexture(All1.Texture0);
                GL1.BindTexture(All1.Texture2D, 0);
                GL1.DeleteTextures(1, ref contextSettings.texture);
            }

            if (contextSettings.textureGeometryHasBeenSetup)
            {
                GL1.DeleteBuffers(1, ref contextSettings.t2bo);
                GL1.DeleteBuffers(1, ref contextSettings.v2bo);
            }

            contextSettings = null;
        }
Example #4
0
        static void arglDispImageStateful(ARGL_CONTEXT_SETTINGS contextSettings)
        {
            int texEnvModeSave;
            int i;

            if (contextSettings == null)
            {
                return;
            }
            if (contextSettings.textureObjectsHaveBeenSetup)
            {
                return;
            }
            if (contextSettings.textureGeometryHasBeenSetup)
            {
                return;
            }
            if (contextSettings.textureDataReady)
            {
                return;
            }

            GL1.ActiveTexture(All1.Texture0);

            GL1.MatrixMode(All1.Texture);
            GL1.LoadIdentity();
            GL1.MatrixMode(All1.Modelview);

            GL1.BindTexture(All1.Texture2D, contextSettings.texture);
            GL1.GetTexEnv(All1.TextureEnv, All1.TextureEnvMode, out texEnvModeSave); // Save GL texture environment mode.
            if (texEnvModeSave != (int)All1.Replace)
            {
                GL1.TexEnv(All1.TextureEnv, All1.TextureEnvMode, (int)All1.Replace);
            }
            GL1.Enable(All1.Texture2D);

            GL1.ClientActiveTexture(All1.Texture0);
            GL1.BindBuffer(All1.ArrayBuffer, contextSettings.t2bo);
            GL1.TexCoordPointer(2, All1.Float, 0, IntPtr.Zero);
            GL1.EnableClientState(All1.TextureCoordArray);

            GL1.BindBuffer(All1.ArrayBuffer, contextSettings.v2bo);
            GL1.VertexPointer(2, All1.Float, 0, IntPtr.Zero);
            GL1.EnableClientState(All1.VertexArray);
            GL1.DisableClientState(All1.NormalArray);

            if (contextSettings.disableDistortionCompensation)
            {
                GL1.DrawArrays(All1.TriangleStrip, 0, 4);
            }
            else
            {
                for (i = 0; i < 20; i++)
                {
                    GL1.DrawArrays(All1.TriangleStrip, i * 42, 42);
                }
            }

            GL1.BindBuffer(All1.ArrayBuffer, 0);
            GL1.DisableClientState(All1.VertexArray);
            GL1.DisableClientState(All1.TextureCoordArray);

            GL1.Disable(All1.Texture2D);
            if (texEnvModeSave != (int)All1.Replace)
            {
                GL1.TexEnv(All1.TextureEnv, All1.TextureEnvMode, texEnvModeSave);                                      // Restore GL texture environment mode.
            }
        }