From 4b7b53fd862a6057c5cb4b1e69867627979c7728 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 22 Apr 2021 11:02:36 -0500 Subject: [PATCH] basics of rendering the world texture --- lib/immediate_renderer.onyx | 22 ++++++++++++++++++---- site/js/webgl2.js | 2 +- site/sand_toy.wasm | Bin 31706 -> 32468 bytes src/sand_toy.onyx | 31 ++++++++++++++++++++++++++++--- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/lib/immediate_renderer.onyx b/lib/immediate_renderer.onyx index e37a0ca..470a16c 100644 --- a/lib/immediate_renderer.onyx +++ b/lib/immediate_renderer.onyx @@ -111,10 +111,10 @@ Immediate_Renderer :: struct { push_vertex :: proc { // If a color is not provided, the previous color is used. (use ir: ^Immediate_Renderer, position: Vector2) { - push_vertex(ir, position, color = verticies[vertex_count - 1].color); + push_vertex(ir, position, texture = .{ 0, 0 }, color = verticies[vertex_count - 1].color); }, - (use ir: ^Immediate_Renderer, position: Vector2, color: Color4) { + (use ir: ^Immediate_Renderer, position: Vector2, color: Color4, texture: Vector2 = .{0,0}) { if vertex_count >= verticies.count do ir->flush(); vertex_ptr := ^verticies[vertex_count]; @@ -122,7 +122,7 @@ Immediate_Renderer :: struct { vertex_ptr.position = position; vertex_ptr.color = color; - vertex_ptr.texture = .{ 0, 0 }; + vertex_ptr.texture = texture; }, } @@ -136,7 +136,17 @@ Immediate_Renderer :: struct { push_vertex(ir, .{ position.x, position.y + size.y }); } - // NOTE: Calling set_texture without a paramter will disabled textured rendering. + textured_quad :: (use ir: ^Immediate_Renderer, position: Vector2, size: Vector2, texture_position: Vector2, texture_size: Vector2, color: Color4 = .{1,1,1}) { + push_vertex(ir, .{ position.x, position.y }, color, .{ texture_position.x, texture_position.y }); + push_vertex(ir, .{ position.x + size.x, position.y }, color, .{ texture_position.x + texture_size.x, texture_position.y }); + push_vertex(ir, .{ position.x + size.x, position.y + size.y }, color, .{ texture_position.x + texture_size.x, texture_position.y + texture_size.y }); + + push_vertex(ir, .{ position.x, position.y }, color, .{ texture_position.x, texture_position.y }); + push_vertex(ir, .{ position.x + size.x, position.y + size.y }, color, .{ texture_position.x + texture_size.x, texture_position.y + texture_size.y }); + push_vertex(ir, .{ position.x, position.y + size.y }, color, .{ texture_position.x, texture_position.y + texture_size.y }); + } + + // NOTE: Calling set_texture without a parameter will disable textured rendering. set_texture :: (use ir: ^Immediate_Renderer, texture_id: i32 = -1) { if vertex_count > 0 do flush(ir); @@ -174,6 +184,10 @@ immediate_quad :: (position: Vector2, size: Vector2, color: Color4 = .{1,1,1}) { immediate_renderer->quad(position, size, color); } +immediate_textured_quad :: (position: Vector2, size: Vector2, texture_position: Vector2, texture_size: Vector2, color: Color4 = .{1,1,1}) { + immediate_renderer->textured_quad(position, size, texture_position, texture_size, color); +} + immediate_flush :: () do immediate_renderer->flush(); immediate_set_texture :: (texture_id: i32 = -1) do immediate_renderer->set_texture(texture_id); diff --git a/site/js/webgl2.js b/site/js/webgl2.js index 61d565a..bd53399 100644 --- a/site/js/webgl2.js +++ b/site/js/webgl2.js @@ -249,7 +249,7 @@ window.ONYX_MODULES.push({ stencilOp(fail, zfail, mask) { gl.stencilOp(fail, zfail, mask); }, stencilOpSeparate(face, fail, zfail, zpass) { gl.stencilOpSeparate(face, fail, zfail, zpass); }, texImage2D(target, level, internalforamt, width, height, border, format, type, pixels, pixelslen) { - const data = new DataView(window.ONYX_MEMORY.buffer, pixels, pixelslen); + const data = new Uint8Array(window.ONYX_MEMORY.buffer, pixels, pixelslen); gl.texImage2D(target, level, internalforamt, width, height, border, format, type, data); }, texParameterf(target, pname, param) { gl.texParameterf(target, pname, param); }, diff --git a/site/sand_toy.wasm b/site/sand_toy.wasm index ed634df6c1f57a6b6bf3f6c377235f4bbfa24dbe..ad6c39bad00b1cfb75777e5912e18f5a93c6d4c0 100644 GIT binary patch delta 10046 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 delta 9007 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 z void #export { -- 2.25.1