From e202ce548d5889982b3bd78047a355e89b0bbdec Mon Sep 17 00:00:00 2001 From: Rod Kay Date: Wed, 24 Apr 2024 18:15:27 +1000 Subject: [PATCH] opengl: Bug fixes for opengl mesa software rendering. --- .../render_models/launch_render_models.adb | 7 ++-- .../assets/shader/lit_colored_text.frag | 9 ++--- .../assets/shader/texturing-frag.snippet | 6 ++-- 3-mid/opengl/assets/shader/version.header | 2 +- 3-mid/opengl/source/demo/opengl-demo.adb | 15 ++++---- .../geometry/opengl-geometry-texturing.adb | 34 +++++++++---------- .../opengl/source/lean/opengl-texture_set.ads | 5 ++- .../source/lean/shader/opengl-shader.adb | 30 ++++++++++++++++ 4-high/gel/source/world/gel-world.adb | 2 +- 9 files changed, 75 insertions(+), 35 deletions(-) diff --git a/3-mid/opengl/applet/demo/renderer/render_models/launch_render_models.adb b/3-mid/opengl/applet/demo/renderer/render_models/launch_render_models.adb index d783b36..ae245d0 100644 --- a/3-mid/opengl/applet/demo/renderer/render_models/launch_render_models.adb +++ b/3-mid/opengl/applet/demo/renderer/render_models/launch_render_models.adb @@ -3,7 +3,9 @@ with openGL.Visual, openGL.Light, openGL.Palette, - openGL.Demo; + openGL.Demo, + + ada.Text_IO; procedure launch_render_Models @@ -14,7 +16,8 @@ is use openGL, openGL.Math, openGL.linear_Algebra_3D, - openGL.Palette; + openGL.Palette, + ada.Text_IO; begin Demo.print_Usage ("Use space ' ' to cycle through models."); diff --git a/3-mid/opengl/assets/shader/lit_colored_text.frag b/3-mid/opengl/assets/shader/lit_colored_text.frag index c97b965..6182eb7 100644 --- a/3-mid/opengl/assets/shader/lit_colored_text.frag +++ b/3-mid/opengl/assets/shader/lit_colored_text.frag @@ -1,12 +1,12 @@ -#version 140 +#version 410 // Texturing snippet. // uniform int texture_Count; -uniform sampler2D Textures [32]; -uniform float Fade [32]; +uniform sampler2D Textures [16]; +uniform float Fade [16]; vec4 apply_Texturing (vec2 Coords) @@ -32,6 +32,7 @@ apply_Texturing (vec2 Coords) struct light { vec4 Site; + float Strength; vec3 Color; float Attenuation; float ambient_Coefficient; @@ -158,4 +159,4 @@ main() final_Color = vec4 (pow (linear_Color, // Final color (after gamma correction). Gamma), surface_Color.a); -} \ No newline at end of file +} diff --git a/3-mid/opengl/assets/shader/texturing-frag.snippet b/3-mid/opengl/assets/shader/texturing-frag.snippet index 22c7a6d..ad26965 100644 --- a/3-mid/opengl/assets/shader/texturing-frag.snippet +++ b/3-mid/opengl/assets/shader/texturing-frag.snippet @@ -1,6 +1,6 @@ uniform int texture_Count; -uniform sampler2D Textures [32]; -uniform float Fade [32]; +uniform sampler2D Textures [16]; +uniform float Fade [16]; vec4 apply_Texturing (vec2 Coords) @@ -23,4 +23,4 @@ apply_Texturing (vec2 Coords) } return Color; -} \ No newline at end of file +} diff --git a/3-mid/opengl/assets/shader/version.header b/3-mid/opengl/assets/shader/version.header index 82f5a4e..6f9468d 100644 --- a/3-mid/opengl/assets/shader/version.header +++ b/3-mid/opengl/assets/shader/version.header @@ -1 +1 @@ -#version 140 +#version 410 diff --git a/3-mid/opengl/source/demo/opengl-demo.adb b/3-mid/opengl/source/demo/opengl-demo.adb index 0c3216d..f6306e5 100644 --- a/3-mid/opengl/source/demo/opengl-demo.adb +++ b/3-mid/opengl/source/demo/opengl-demo.adb @@ -235,11 +235,13 @@ is End_1 => [0.0, 0.0, 0.0], End_2 => [5.0, 5.0, 0.0]); - the_collada_Model : constant Model.any.view - := Model.any.new_Model (--Scale => (1.0, 1.0, 1.0), - Model => to_Asset ("assets/opengl/model/human.dae"), - Texture => the_Texture, - Texture_is_lucid => False); + -- The collada model requires 'Desktop' openGL build mode. + -- + -- the_collada_Model : constant Model.any.view + -- := Model.any.new_Model (--Scale => (1.0, 1.0, 1.0), + -- Model => to_Asset ("assets/opengl/model/human.dae"), + -- Texture => the_Texture, + -- Texture_is_lucid => False); the_wavefront_Model : constant Model.any.view := Model.any.new_Model (--Scale => (1.0, 1.0, 1.0), @@ -267,6 +269,7 @@ is the_segment_line_Model : constant Model.segment_line.view := Model.segment_line.new_segment_line_Model (Color => Green); + -- Terrain -- heights_File : constant asset_Name := to_Asset ("assets/opengl/terrain/kidwelly-terrain.png"); @@ -318,7 +321,7 @@ is the_rounded_hexagon_column_Model.all'Access, the_line_Model.all'Access, - the_collada_Model.all'Access, + -- the_collada_Model.all'Access, the_wavefront_Model.all'Access, the_segment_line_Model.all'Access]; diff --git a/3-mid/opengl/source/lean/geometry/opengl-geometry-texturing.adb b/3-mid/opengl/source/lean/geometry/opengl-geometry-texturing.adb index d200072..3158e76 100644 --- a/3-mid/opengl/source/lean/geometry/opengl-geometry-texturing.adb +++ b/3-mid/opengl/source/lean/geometry/opengl-geometry-texturing.adb @@ -29,23 +29,23 @@ is GL_TEXTURE12, GL_TEXTURE13, GL_TEXTURE14, - GL_TEXTURE15, - GL_TEXTURE16, - GL_TEXTURE17, - GL_TEXTURE18, - GL_TEXTURE19, - GL_TEXTURE20, - GL_TEXTURE21, - GL_TEXTURE22, - GL_TEXTURE23, - GL_TEXTURE24, - GL_TEXTURE25, - GL_TEXTURE26, - GL_TEXTURE27, - GL_TEXTURE28, - GL_TEXTURE29, - GL_TEXTURE30, - GL_TEXTURE31); + GL_TEXTURE15); + -- GL_TEXTURE16, + -- GL_TEXTURE17, + -- GL_TEXTURE18, + -- GL_TEXTURE19, + -- GL_TEXTURE20, + -- GL_TEXTURE21, + -- GL_TEXTURE22, + -- GL_TEXTURE23, + -- GL_TEXTURE24, + -- GL_TEXTURE25, + -- GL_TEXTURE26, + -- GL_TEXTURE27, + -- GL_TEXTURE28, + -- GL_TEXTURE29, + -- GL_TEXTURE30, + -- GL_TEXTURE31); diff --git a/3-mid/opengl/source/lean/opengl-texture_set.ads b/3-mid/opengl/source/lean/opengl-texture_set.ads index b1a9896..7396b16 100644 --- a/3-mid/opengl/source/lean/opengl-texture_set.ads +++ b/3-mid/opengl/source/lean/opengl-texture_set.ads @@ -9,7 +9,10 @@ package openGL.texture_Set -- Facilitates texturing of geometries. -- is - max_Textures : constant := 32; + --- Note that Mesa currently only supports 16 texture units. + -- + -- max_Textures : constant := 32; + max_Textures : constant := 16; type texture_Id is range 1 .. max_Textures; diff --git a/3-mid/opengl/source/lean/shader/opengl-shader.adb b/3-mid/opengl/source/lean/shader/opengl-shader.adb index a5cc086..5dd78a4 100644 --- a/3-mid/opengl/source/lean/shader/opengl-shader.adb +++ b/3-mid/opengl/source/lean/shader/opengl-shader.adb @@ -121,8 +121,12 @@ is if Status = 0 then declare + use ada.Text_IO; compile_Log : constant String := Self.shader_info_Log; begin + new_Line; + put_Line ("Shader compile log:"); + put_Line (compile_Log); Self.destroy; raise Error with "'" & to_Ada (the_Source) & "' compilation failed ~ " & compile_Log; end; @@ -147,8 +151,34 @@ is procedure define (Self : in out Item; Kind : in Shader.Kind; shader_Snippets : in asset_Names) is + use ada.Text_IO, + interfaces.C; + the_Source : aliased constant C.char_array := to_C_char_array (shader_Snippets); begin + -- if Debug + -- then + new_Line; + put_Line ("Shader snippets:"); + + for Each of shader_Snippets + loop + put_Line (to_String (Each)); + end loop; + + new_Line; + new_Line; + new_Line; + new_Line; + put_Line ("Shader source code:"); + put_Line (to_Ada (the_Source)); + put_Line ("End source code!"); + new_Line; + new_Line; + new_Line; + new_Line; + -- end if; + create_Shader (Self, Kind, the_Source); end define; diff --git a/4-high/gel/source/world/gel-world.adb b/4-high/gel/source/world/gel-world.adb index 40f83fd..1977b13 100644 --- a/4-high/gel/source/world/gel-world.adb +++ b/4-high/gel/source/world/gel-world.adb @@ -102,7 +102,7 @@ is the_graphics_Model := openGL .Model.view (the_graphics_Models.Element (the_Pair.graphics_Model_Id)); the_physics_Model := physics.Model.view ( the_physics_Models.Element (the_Pair. physics_Model_Id)); - the_Sprite := gel.Sprite.forge.new_Sprite ("1Sprite" & the_Pair.sprite_Id'Image, + the_Sprite := gel.Sprite.forge.new_Sprite ("Sprite" & the_Pair.sprite_Id'Image, sprite.World_view (the_World), get_Translation (the_Pair.Transform), the_graphics_Model,