def __init__(self, plus): renderer = plus.GetRenderer() # create primitive index buffer data = hg.BinaryData() data.WriteInt16s([0, 1, 2, 0, 2, 3]) self.indices = renderer.NewBuffer() renderer.CreateBuffer(self.indices, data, hg.GpuBufferIndex) # create primitive vertex buffer self.vertex_layout = hg.VertexLayout() self.vertex_layout.AddAttribute(hg.VertexPosition, 3, hg.VertexFloat) self.vertex_layout.AddAttribute( hg.VertexUV0, 2, hg.VertexUByte, True ) # UVs are sent as normalized 8 bit unsigned integer (range [0;255]) data = hg.BinaryData() x, y = 1, 1 data.WriteFloats([-x, -y, 0]) data.WriteUInt8s([0, 0]) data.WriteFloats([-x, y, 0]) data.WriteUInt8s([0, 255]) data.WriteFloats([x, y, 0]) data.WriteUInt8s([255, 255]) data.WriteFloats([x, -y, 0]) data.WriteUInt8s([255, 0]) self.vertex = renderer.NewBuffer() renderer.CreateBuffer(self.vertex, data, hg.GpuBufferVertex)
def setup(): global uvdens_tex, uvdens_render_target, uvdens_tex_prev, uvdens_render_target_prev global idx, vtx, vtx_layout global shader, shader_set_inputs, shader_add_sources, shader_draw_uvdens, shader_lin_solve, shader_advect, shader_projectA, shader_projectB renderer = plus.GetRenderer() # create the 2 render target def create_tex_and_render_target(): tex = renderer.NewTexture() pic = hg.Picture(size, size, hg.PictureRGBAF) renderer.CreateTexture( tex, pic, hg.TextureIsRenderTarget | hg.TextureIsShaderResource) render_target = renderer.NewRenderTarget() renderer.CreateRenderTarget(render_target) renderer.SetRenderTargetColorTexture(render_target, tex) return tex, render_target uvdens_tex, uvdens_render_target = create_tex_and_render_target() uvdens_tex_prev, uvdens_render_target_prev = create_tex_and_render_target() # Create index buffer data = hg.BinaryData() data.WriteInt16s([0, 1, 2, 0, 2, 3]) idx = renderer.NewBuffer() renderer.CreateBuffer(idx, data, hg.GpuBufferIndex) # Create vertex buffer vtx_layout = hg.VertexLayout() vtx_layout.AddAttribute(hg.VertexPosition, 3, hg.VertexFloat) vtx_layout.AddAttribute(hg.VertexUV0, 2, hg.VertexUByte) data = hg.BinaryData() x, y = 1, 1 data.WriteFloats([-x, -y, 0.5]) data.WriteUInt8s([0, 0]) data.WriteFloats([-x, y, 0.5]) data.WriteUInt8s([0, 1]) data.WriteFloats([x, y, 0.5]) data.WriteUInt8s([1, 1]) data.WriteFloats([x, -y, 0.5]) data.WriteUInt8s([1, 0]) vtx = renderer.NewBuffer() renderer.CreateBuffer(vtx, data, hg.GpuBufferVertex) # Load shader. shader = renderer.LoadShader("@assets/vel.isl") shader_set_inputs = renderer.LoadShader("@assets/set_inputs.isl") shader_add_sources = renderer.LoadShader("@assets/add_source.isl") shader_draw_uvdens = renderer.LoadShader("@assets/draw_uvdens.isl") shader_lin_solve = renderer.LoadShader("@assets/lin_solve.isl") shader_advect = renderer.LoadShader("@assets/advect.isl") shader_projectA = renderer.LoadShader("@assets/projectA.isl") shader_projectB = renderer.LoadShader("@assets/projectB.isl")
surface = renderer.NewOutputSurface(win) renderer.SetOutputSurface(surface) # load 2d shader and retrieve variables shader_color = renderer.LoadShader("_data/shader_2d_color.isl") shader_texture = renderer.LoadShader("_data/shader_2d_single_texture.isl") # create primitive index buffer data = hg.BinaryData() data.WriteUInt16s([0, 1, 2]) idx = renderer.NewBuffer() renderer.CreateBuffer(idx, data, hg.GpuBufferIndex) # create primitive vertex buffer vtx_layout = hg.VertexLayout() vtx_layout.AddAttribute(hg.VertexPosition, 3, hg.VertexFloat) vtx_layout.AddAttribute( hg.VertexUV0, 2, hg.VertexUByte, True) # UVs are sent as normalized 8 bit unsigned integer (range [0;255]) data = hg.BinaryData() x, y = 0.5, 0.5 data.WriteFloats([-x, -y, 0.5]) data.WriteUInt8s([127, 0]) data.WriteFloats([-x, y, 0.5]) data.WriteUInt8s([0, 127]) data.WriteFloats([x, y, 0.5])