Ejemplo n.º 1
0
        public bool InitGameWindow(RDisplayMode displayMode, RWindowStyle windowStyle, string title = "Reactor")
        {
            try
            {
                RGame.GameWindow.Title = title;

                GameWindowRenderControl control = new GameWindowRenderControl();
                control.GameWindow            = RGame.GameWindow;
                control.GameWindow.ClientSize = new System.Drawing.Size(displayMode.Width, displayMode.Height);
                if (windowStyle == RWindowStyle.Borderless)
                {
                    control.GameWindow.WindowBorder = WindowBorder.Hidden;
                }
                control.GameWindow.X = 0;
                control.GameWindow.Y = 0;
                control.Context      = (GraphicsContext)control.GameWindow.Context;
                _renderControl       = control;

                RLog.Info(GetGLInfo());
                REngine.CheckGLError();
                RLog.Info("Game Window Renderer Initialized.");
                //PrintExtensions();
                REngine.CheckGLError();

                RShader.InitShaders();
                REngine.CheckGLError();
                Screen.Init();
                REngine.CheckGLError();
                return(true);
            } catch (Exception e) {
                RLog.Error(e);
                return(false);
            }
        }
Ejemplo n.º 2
0
        public void RenderFullscreenQuad(RShader shader)
        {
            RViewport viewport = REngine.Instance._viewport;

            quadVerts[0].Position = new Vector2(-1, -1);
            quadVerts[0].TexCoord = new Vector2(0, 0);
            quadVerts[1].Position = new Vector2(1, -1);
            quadVerts[1].TexCoord = new Vector2(1, 0);
            quadVerts[2].Position = new Vector2(1, 1);
            quadVerts[2].TexCoord = new Vector2(1, 1);
            quadVerts[3].Position = new Vector2(-1, 1);
            quadVerts[3].TexCoord = new Vector2(0, 1);
            vertexQuad2D.SetData <RVertexData2D>(quadVerts);
            shader.Bind();
            GL.Disable(EnableCap.DepthTest);
            GL.Disable(EnableCap.CullFace);
            vertexQuad2D.Bind();
            vertexQuad2D.BindVertexArray();
            indexQuad2D.Bind();

            vertexQuad2D.VertexDeclaration.Apply(shader, IntPtr.Zero);


            GL.DrawElements(PrimitiveType.Triangles, indexQuad2D.IndexCount, DrawElementsType.UnsignedShort, IntPtr.Zero);
            REngine.CheckGLError();

            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.DstAlpha);

            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.CullFace);
            indexQuad2D.Unbind();
            vertexQuad2D.UnbindVertexArray();
            vertexQuad2D.Unbind();
            shader.Unbind();
        }
    public void Add(string name, object obj, object tag = null)
    {
        var type = obj.GetType();

        if (type == typeof(Shader))
        {
            var item = new RShader();
            item.name  = name;
            item.value = obj as Shader;
            listShader.Add(item);
        }
        else if (type == typeof(Texture2D))
        {
            var item = new RTexture();
            item.name  = name;
            item.value = obj as Texture2D;
            listTexture.Add(item);
        }
        else if (type == typeof(Material))
        {
            var item = new RMaterial();
            item.name  = name;
            item.value = obj as Material;
            listMaterial.Add(item);
        }
        else if (type == typeof(GameObject))
        {
            var item = new RGameObject();
            item.name  = name;
            item.value = obj as GameObject;
            listGameObject.Add(item);
        }
        else if (type == typeof(GUISkin))
        {
            var item = new RGUISkin();
            item.name  = name;
            item.value = obj as GUISkin;
            listGUISkin.Add(item);
        }
        else if (type == typeof(Font))
        {
            var item = new RFont();
            item.name  = name;
            item.value = obj as Font;
            listFont.Add(item);
        }
        else
        {
            var item = new RUnknown();
            item.name  = name;
            item.type  = type.Name;
            item.value = obj.ToString();
            listUnknown.Add(item);
        }
    }
Ejemplo n.º 4
0
        public void CreateSkyBox(RShader skyBoxShader)
        {
            sky = RScene.Instance.CreateMeshBuilder("skybox");
            sky.CreateBox(Vector3.Zero, Vector3.One, true);
            sky.Matrix     = Matrix.Identity;
            sky.DepthWrite = false;
            RMaterial skyBoxMaterial = new RMaterial("skybox");

            skyBoxMaterial.Shader = skyBoxShader;
            sky.Material          = skyBoxMaterial;
        }
Ejemplo n.º 5
0
        internal void Apply(RShader shader, IntPtr offset)
        {
            RVertexDeclarationAttributeInfo attrInfo;
            int shaderHash = shader.GetHashCode();

            if (!shaderAttributeInfo.TryGetValue(shaderHash, out attrInfo))
            {
                // Get the vertex attribute info and cache it
                attrInfo = new RVertexDeclarationAttributeInfo(16);

                foreach (var ve in _elements)
                {
                    var attributeLocation = shader.GetAttribLocation(ve.VertexElementUsage);

                    if (attributeLocation >= 0)
                    {
                        attrInfo.Elements.Add(new RVertexDeclarationAttributeInfo.Element()
                        {
                            Offset                  = ve.Offset,
                            AttributeLocation       = attributeLocation,
                            NumberOfElements        = RVertexElement.OpenGLNumberOfElements(ve.VertexElementFormat),
                            VertexAttribPointerType = RVertexElement.OpenGLVertexAttribPointerType(ve.VertexElementFormat),
                            Normalized              = RVertexElement.OpenGLVertexAttribNormalized(ve),
                        });
                        attrInfo.EnabledAttributes[attributeLocation] = true;
                    }
                }

                shaderAttributeInfo.Add(shaderHash, attrInfo);
            }

            // Apply the vertex attribute info
            foreach (var element in attrInfo.Elements)
            {
                GL.EnableVertexAttribArray(element.AttributeLocation);
                REngine.CheckGLError();
                GL.VertexAttribPointer(element.AttributeLocation,
                                       element.NumberOfElements,
                                       element.VertexAttribPointerType,
                                       element.Normalized,
                                       this.VertexStride,
                                       (IntPtr)(offset.ToInt64() + element.Offset));
                REngine.CheckGLError();
            }
            //GraphicsDevice.SetVertexAttributeArray(attrInfo.EnabledAttributes);
        }
Ejemplo n.º 6
0
 public bool InitPictureBox(IntPtr handle)
 {
     try
     {
         PictureBoxRenderControl control = new PictureBoxRenderControl();
         control.PictureBox = (PictureBox)PictureBox.FromHandle(handle);
         control.Init();
         _renderControl = control;
         RShader.InitShaders();
         Screen.Init();
         RLog.Info(GetGLInfo());
         RLog.Info("Picture Box Renderer Initialized.");
         return(true);
     } catch (Exception e) {
         RLog.Error(e);
         return(false);
     }
 }
Ejemplo n.º 7
0
 public bool InitForm(IntPtr handle)
 {
     try
     {
         FormRenderControl control = new FormRenderControl();
         control.Form = (Form)Form.FromHandle(handle);
         control.Init();
         _renderControl = control;
         RShader.InitShaders();
         Screen.Init();
         RLog.Info(GetGLInfo());
         RLog.Info("Form Renderer Initialized.");
         PrintExtensions();
         return(true);
     }
     catch (Exception e)
     {
         RLog.Error(e);
         return(false);
     }
 }
Ejemplo n.º 8
0
        public void CreateSkyBox(RTexture3D skyBoxTexture)
        {
            skybox = new RShader();
            skybox.Load(@"
#include ""headers.glsl""
uniform mat4 proj : PROJECTION;
uniform mat4 mv : MODELVIEW;

smooth out vec3 eye;

void main()
{
    mat3 imv = mat3(inverse(mv));
    mat4 inverseProjection = inverse(proj);
    vec3 unprojected = (inverseProjection * vec4(r_Position, 1.0)).xyz;
    eye = imv * unprojected;

    gl_Position = vec4(r_Position, 1.0);
}
", @"

smooth in vec3 eye;
uniform samplerCube diffuse;
out vec4 fragColor;
void main()
{
    fragColor = texture(diffuse, eye);
}
", null);
            sky = RScene.Instance.CreateMeshBuilder("skybox");
            sky.CreateBox(Vector3.Zero, Vector3.One, true);
            sky.Matrix     = Matrix.Identity;
            sky.DepthWrite = false;
            RMaterial skyBoxMaterial = new RMaterial("skybox");

            skyBoxMaterial.Shader = skybox;
            skyBoxMaterial.SetTexture(RTextureLayer.DIFFUSE, skyBoxTexture);
            sky.Material = skyBoxMaterial;
        }
Ejemplo n.º 9
0
        internal void Init()
        {
            REngine.CheckGLError();

            defaultShader = new RShader();
            defaultShader.Load(RShaderResources.Basic2dEffectVert, RShaderResources.Basic2dEffectFrag, null);
            Fonts.Add(RFont.Default);
            quad = new RMeshBuilder();
            quad.CreateQuad(new Vector2(0, 0), new Vector2(1, 1), true);
            quadVerts    = new RVertexData2D[4];
            quadVerts[0] = new RVertexData2D(new Vector2(-1, -1), new Vector2(0, 0));
            quadVerts[1] = new RVertexData2D(new Vector2(1, -1), new Vector2(1, 0));
            quadVerts[2] = new RVertexData2D(new Vector2(1, 1), new Vector2(1, 1));
            quadVerts[3] = new RVertexData2D(new Vector2(-1, 1), new Vector2(0, 1));
            vertexQuad2D = new RVertexBuffer(quadVerts[0].Declaration, 4, RBufferUsage.WriteOnly);
            vertexQuad2D.SetData <RVertexData2D>(quadVerts);
            indexQuad2D = new RIndexBuffer(typeof(short), 6, RBufferUsage.WriteOnly);
            indexQuad2D.SetData <short>(new short[6] {
                0, 1, 2, 0, 2, 3
            }, 0, 6);
            initialized = true;
        }
Ejemplo n.º 10
0
 public void InitHDR()
 {
     hdrFrameBuffer = new RFrameBuffer((int)_viewport.Width, (int)_viewport.Height, false, RSurfaceFormat.Vector4, RDepthFormat.Depth32Stencil8);
     hdrShader      = new RShader();
     hdrShader.Load(RShaderResources.HDRVert, RShaderResources.HDRFrag);
 }