コード例 #1
0
        public void loadTexture(shader_gl shader, shader_p surface, stage_gl stage)
        {
            int i;

            if (shader.sky)
            {
                Console.WriteLine("[skybox] {0}", shader.name);
            }
            if (stage.map == null)
            {
                stage.texture = white;
                return;
            }
            else if (stage.map.Contains("$lightmap"))
            {
                stage.texture = (surface.geomType != 3 ? q3bsp.lightmap : white);
                return;
            }
            else if (stage.map.Contains("$whiteimage"))
            {
                stage.texture = white;
                return;
            }

            stage.texture = defaultTexture;

            if (stage.map == "anim")
            {
                stage.animTexture = new List <int>();

                for (i = 0; i < stage.animMaps.Count; ++i)
                {
                    if (i > stage.animTexture.Count - 1)
                    {
                        stage.animTexture.Add(defaultTexture);
                    }

                    string url = Config.q3bsp_base_folder + "/" + stage.animMaps[i];

                    loadTextureUrl(stage, url, (int texture) =>
                    {
                        stage.animTexture.Insert(i, texture);
                    });
                }

                stage.animFrame = 0;
            }
            else
            {
                if (shader.sky == false)
                {
                    string url = Config.q3bsp_base_folder + "/" + stage.map;

                    loadTextureUrl(stage, url, (int texture) =>
                    {
                        stage.texture = texture;
                    });
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Texture loading
        /// </summary>
        public void loadShaderMaps(shader_p surface, shader_gl shader)
        {
            if (shader.sky == true)
            {
                q3bsp.skybox_env = skybox.loadFromShader(surface, shader);
            }
            for (int i = 0; i < shader.stages.Count; ++i)
            {
                stage_gl stage = shader.stages[i];

                stage.shaderName = shader.name;

                if (stage.map != null)
                {
                    loadTexture(shader, surface, stage);
                }

                if (stage.shaderSrc != null && stage.program == null)
                {
                    Console.WriteLine("Compiling " + shader.name);
                    //fetch_update("Compiling " + shader.name);
                    stage.program = compileShaderProgram(stage.shaderSrc.vertex.source_code,
                                                         stage.shaderSrc.fragment.source_code);
                }
            }
        }
コード例 #3
0
        public shader_gl buildDefault(shader_p surface)
        {
            stage_gl diffuseStage = new stage_gl();

            diffuseStage.map        = (surface != null ? surface.shaderName + ".jpg" : null);
            diffuseStage.isLightmap = false;
            diffuseStage.blendSrc   = (int)BlendingFactorSrc.One;
            diffuseStage.blendDest  = (int)BlendingFactorDest.Zero;
            diffuseStage.depthFunc  = DepthFunction.Lequal;
            diffuseStage.depthWrite = true;

            shader_gl glShader = new shader_gl();

            glShader.cull   = CullFaceMode.Front;
            glShader.blend  = false;
            glShader.sort   = 3;
            glShader.stages = (new stage_gl[] { diffuseStage }).ToList();
            glShader.sky    = false;

            if (surface != null)
            {
                loadTexture(glShader, surface, diffuseStage);
            }
            else
            {
                diffuseStage.texture = defaultTexture;
            }

            return(glShader);
        }
コード例 #4
0
ファイル: Skybox.cs プロジェクト: geralltf/alethaCS
        public static skybox loadFromShader(shader_p surface, shader_gl shader)
        {
            skybox sky = new skybox();

            var context = new OpenTK.Graphics.GraphicsContext(AlethaApplication.GraphicsMode, AlethaApplication.NativeWindowContext.WindowInfo);

            context.MakeCurrent(AlethaApplication.NativeWindowContext.WindowInfo);

            // determine type of skybox: number of textures to load

            //sky.type = skybox_type.one_tex;


            buildSkyboxbuffers();


            loadSkyTexture(shader, surface, (int texture) =>
            {
                //.skymap = texture;
            },
                           (int texture) =>
            {
                sky.skymap = texture;

                //GL.GenerateMipmap(GenerateMipmapTarget.TextureCubeMap);
            });

            return(sky);
        }
コード例 #5
0
ファイル: Skybox.cs プロジェクト: geralltf/alethaCS
        public static void loadSkyTexture(shader_gl shader,
                                          shader_p surface,
                                          OnTextueLoad onTextureLoading,
                                          OnTextueLoad onTextureLoadComplete)
        {
            bool has_skyparams = shader.sky_env_map != null;



            if (has_skyparams)
            {
                // hard code in six or one texture mode for now

                String url       = Config.q3bsp_base_folder + "/" + shader.sky_env_map.@params;
                String back_url  = url + "_bk.jpg";
                String down_url  = url + "_dn.jpg";
                String front_url = url + "_ft.jpg";
                String left_url  = url + "_lf.jpg";
                String right_url = url + "_rt.jpg";
                String up_url    = url + "_up.jpg";

                cubemap_texture_six.load(back_url,
                                         down_url,
                                         front_url,
                                         left_url,
                                         right_url,
                                         up_url,
                                         (int texture) =>
                {
                    onTextureLoading(texture);
                },
                                         (int texture) =>
                {
                    onTextureLoadComplete(texture);
                });



                //TODO: support for single texture mode using something like this. need to find test map.

                //      cubemap_texture_one.load(back_url, gl,
                //      (GLTexture texture)
                //      {
                //        onTextureLoading(texture);
                //      },
                //      (GLTexture texture)
                //      {
                //        onTextureLoadComplete(texture);
                //      });

                //cubemap_texture_one.load(q3bsp_base_folder + '/' + stage.map, gl, null, onTextureLoadComplete);
            }
            else
            {
                //UNTESTED condition
            }
        }
コード例 #6
0
        /// <summary>
        /// Shader building
        /// </summary>
        public shader_gl build(shader_t shader, shader_p surface)
        {
            if (shader == null)
            {
                return(null);
            }

            shader_gl glShader = new shader_gl();

            glShader.cull        = translateCull(shader.cull);
            glShader.sort        = shader.sort;
            glShader.sky         = shader.sky;
            glShader.blend       = shader.blend;
            glShader.name        = shader.name;
            glShader.sky_env_map = shader.sky_env_map;
            glShader.stages      = new List <stage_gl>();

            for (int j = 0; j < shader.stages.Count; ++j)
            {
                stage_t  t = shader.stages[j];
                stage_gl s = new stage_gl();

                //s.animFrame = t.animFrame;
                s.animFreq = t.animFreq;
                s.animMaps = t.animMaps;
                //s.animTexture = t.animTexture;
                s.texture   = -1;
                s.blendSrc  = translateBlendSrc(t.blendSrc);
                s.blendDest = translateBlendDest(t.blendDest);
                s.depthFunc = translateDepthFunc(t.depthFunc);
                s.map       = t.map;
                s.tcMods    = t.tcMods;

                s.depthWrite         = t.depthWrite;
                s.isLightmap         = t.isLightmap;
                s.shaderSrc          = t.shaderSrc;
                s.clamp              = t.clamp;
                s.tcGen              = t.tcGen;
                s.rgbGen             = t.rgbGen;
                s.rgbWaveform        = t.rgbWaveform;
                s.alphaGen           = t.alphaGen;
                s.alphaFunc          = t.alphaFunc;
                s.alphaWaveform      = t.alphaWaveform;
                s.hasBlendFunc       = t.hasBlendFunc;
                s.depthWriteOverride = t.depthWriteOverride;
                s.blend              = t.blend;
                s.opaque             = t.opaque;

                glShader.stages.Add(s);
            }

            return(glShader);
        }