add background to god
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 6.5 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 43 KiB |
|
@ -17,6 +17,8 @@ module Funfriend
|
||||||
|
|
||||||
# Returns the textures this buddy uses
|
# Returns the textures this buddy uses
|
||||||
abstract def textures : TextureMan::TextureBasket
|
abstract def textures : TextureMan::TextureBasket
|
||||||
|
# Texture to stretch over the whole canvas
|
||||||
|
abstract def bg_texture : Texture?
|
||||||
|
|
||||||
# Implements the logic for the talk SFX, similar to corru.observer's `talk: () => ...`
|
# Implements the logic for the talk SFX, similar to corru.observer's `talk: () => ...`
|
||||||
abstract def talk_sound
|
abstract def talk_sound
|
||||||
|
@ -58,6 +60,10 @@ module Funfriend
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def bg_texture : Texture?
|
||||||
|
nil
|
||||||
|
end
|
||||||
|
|
||||||
def talk_sound
|
def talk_sound
|
||||||
SoundMan.play_sound("assets/sfx/talk#{(1..8).sample}.ogg")
|
SoundMan.play_sound("assets/sfx/talk#{(1..8).sample}.ogg")
|
||||||
end
|
end
|
||||||
|
@ -95,6 +101,10 @@ module Funfriend
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def bg_texture : Texture?
|
||||||
|
TextureMan.load_texture("assets/buddies/god_bg.png")[:tex]
|
||||||
|
end
|
||||||
|
|
||||||
def talk_sound
|
def talk_sound
|
||||||
SoundMan.play_sound("assets/sfx/talk_god#{(1..8).sample}.ogg")
|
SoundMan.play_sound("assets/sfx/talk_god#{(1..8).sample}.ogg")
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
class Funfriend::BuddyRenderer
|
class Funfriend::BuddyRenderer
|
||||||
getter buddy : Buddy
|
getter buddy : Buddy
|
||||||
|
|
||||||
getter shader_program : Program
|
getter buddy_shader : Program
|
||||||
|
getter bg_shader : Program
|
||||||
getter vertex_array : VertexArray
|
getter vertex_array : VertexArray
|
||||||
getter vertex_buffer : Buffer
|
getter vertex_buffer : Buffer
|
||||||
getter textures : TextureMan::TextureBasket
|
getter textures : TextureMan::TextureBasket
|
||||||
|
getter bg_texture : Texture?
|
||||||
|
|
||||||
def initialize(@buddy : Buddy)
|
def initialize(@buddy : Buddy)
|
||||||
@shader_program = init_shaders
|
@buddy_shader, @bg_shader = init_shaders
|
||||||
@vertex_array, @vertex_buffer = init_buffers
|
@vertex_array, @vertex_buffer = init_buffers
|
||||||
@textures = buddy.textures
|
@textures = buddy.textures
|
||||||
|
@bg_texture = buddy.bg_texture
|
||||||
end
|
end
|
||||||
|
|
||||||
def funfriend_size
|
def funfriend_size
|
||||||
|
@ -59,14 +62,7 @@ class Funfriend::BuddyRenderer
|
||||||
end
|
end
|
||||||
|
|
||||||
def init_shaders
|
def init_shaders
|
||||||
vertex_shader_source = FileStorage.get("nop.vert").gets_to_end
|
{GL.shader("funfriend.frag", "nop.vert"), GL.shader("nop.frag", "nop.vert")}
|
||||||
fragment_shader_source = FileStorage.get("funfriend.frag").gets_to_end
|
|
||||||
|
|
||||||
vertex_shader = VertexShader.create(vertex_shader_source)
|
|
||||||
fragment_shader = FragmentShader.create(fragment_shader_source)
|
|
||||||
|
|
||||||
shaders = {vertex_shader, fragment_shader}
|
|
||||||
return Program.create(shaders)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(dt : Float64, window_width : Int32, window_height : Int32)
|
def render(dt : Float64, window_width : Int32, window_height : Int32)
|
||||||
|
@ -78,9 +74,23 @@ class Funfriend::BuddyRenderer
|
||||||
|
|
||||||
width, height = frame[:width], frame[:height]
|
width, height = frame[:width], frame[:height]
|
||||||
|
|
||||||
Texture::Unit.activate(0)
|
LibGL.enable(LibGL::BLEND)
|
||||||
|
LibGL.blend_func(LibGL::SRC_ALPHA, LibGL::ONE_MINUS_SRC_ALPHA)
|
||||||
|
|
||||||
|
if bg_texture
|
||||||
|
bg_texture.not_nil!.bind(Texture::Target::Texture2D) do
|
||||||
|
bg_shader.use do |shader|
|
||||||
|
shader.set_uniform("texture1", 0)
|
||||||
|
|
||||||
|
vertex_array.bind do
|
||||||
|
LibGL.draw_elements(LibGL::TRIANGLES, 6, DataType::UnsignedInt, Pointer(Void).new(0))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
frame[:tex].bind(Texture::Target::Texture2D) do
|
frame[:tex].bind(Texture::Target::Texture2D) do
|
||||||
shader_program.use do |shader|
|
buddy_shader.use do |shader|
|
||||||
shader.set_uniform("texture1", 0)
|
shader.set_uniform("texture1", 0)
|
||||||
shader.set_uniform("funfriendSize", funfriend_size[:width].to_f32, funfriend_size[:height].to_f32)
|
shader.set_uniform("funfriendSize", funfriend_size[:width].to_f32, funfriend_size[:height].to_f32)
|
||||||
shader.set_uniform("resolution", window_width.to_f32, window_height.to_f32)
|
shader.set_uniform("resolution", window_width.to_f32, window_height.to_f32)
|
||||||
|
|
11
src/gl.cr
|
@ -12,4 +12,15 @@ module Funfriend::GL
|
||||||
offset += size
|
offset += size
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def shader(fragment_filename : String, vertex_filename : String) : Program
|
||||||
|
vertex_shader_source = FileStorage.get(vertex_filename).gets_to_end
|
||||||
|
fragment_shader_source = FileStorage.get(fragment_filename).gets_to_end
|
||||||
|
|
||||||
|
vertex_shader = VertexShader.create(vertex_shader_source)
|
||||||
|
fragment_shader = FragmentShader.create(fragment_shader_source)
|
||||||
|
|
||||||
|
shaders = {vertex_shader, fragment_shader}
|
||||||
|
Program.create(shaders)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,17 +35,13 @@ class Funfriend::TextRenderer
|
||||||
end
|
end
|
||||||
|
|
||||||
def init_shaders
|
def init_shaders
|
||||||
vertex_shader_source = FileStorage.get("nop.vert").gets_to_end
|
GL.shader("nop.frag", "nop.vert")
|
||||||
fragment_shader_source = FileStorage.get("bake_alpha.frag").gets_to_end
|
|
||||||
|
|
||||||
vertex_shader = VertexShader.create(vertex_shader_source)
|
|
||||||
fragment_shader = FragmentShader.create(fragment_shader_source)
|
|
||||||
|
|
||||||
shaders = {vertex_shader, fragment_shader}
|
|
||||||
return Program.create(shaders)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def render(dt : Float64)
|
def render(dt : Float64)
|
||||||
|
LibGL.enable(LibGL::BLEND)
|
||||||
|
LibGL.blend_func(LibGL::SRC_ALPHA, LibGL::ONE_MINUS_SRC_ALPHA)
|
||||||
|
|
||||||
font_texture.bind(Texture::Target::Texture2D) do
|
font_texture.bind(Texture::Target::Texture2D) do
|
||||||
shader_program.use do |p|
|
shader_program.use do |p|
|
||||||
p.set_uniform("texture1", 0)
|
p.set_uniform("texture1", 0)
|
||||||
|
|