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); } }
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); } }
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; }
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); }
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); } }
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); } }
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; }
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; }
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); }