render

package
v0.0.0-...-6aa7f09 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 16, 2023 License: Apache-2.0 Imports: 13 Imported by: 2

README

Pipeline preparation

Remember some states

For each camera we create a "RenderInfo"

  • Create a RendererPasser or something

Render will gather renderables related to camera

Documentation

Overview

Package render mostly agnostic gl renderer with a couple of exceptions due to some limitations

It will listen for ECS events

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BlendEnum

func BlendEnum(n gorge.BlendEnum) gl.Enum

func BlendEq

func BlendEq(n gorge.BlendEq) gl.Enum

func CullMask

CullMask returns a bit CullMask if it's 0 it will return the default mask 0xFF

func DrawMode

func DrawMode(d gorge.DrawMode) gl.Enum

DrawMode converts gorge DrawMode into gl POINTS = 0x0000 LINES = 0x0001 LINE_LOOP = 0x0002 LINE_STRIP = 0x0003 TRIANGLES = 0x0004 TRIANGLE_STRIP = 0x0005 TRIANGLE_FAN = 0x0006

func StencilFunc

func StencilFunc(n gorge.StencilFunc) gl.Enum

StencilFunc converts gorge stencil to opengl enum.

func StencilOp

func StencilOp(n gorge.StencilOp) gl.Enum

StencilOp converts gorge stencil to opengl.

func System

func System(g *gorge.Context)

func TextureFormat

func TextureFormat(n gorge.TextureFormat) (int, gl.Enum, gl.Enum)

TextureFormat returns the internal format and format enum for gl.TexImage2D

func TextureWrap

func TextureWrap(n gorge.TextureWrap) int

TextureWrap converts gorge textureWrap to gl.

Types

type Bufferer

type Bufferer interface {
	ID() gl.Buffer
	Init(sz int)
	Destroy()
	Bind()
	WriteAt(data []byte, offs int)
	Flush()
	Size() int
}

Bufferer interface to handle renderer buffer

type Camera

type Camera interface {
	Mat4() gm.Mat4
	Camera() *gorge.CameraComponent
}

Camera interface for accepting camera structs

type Component

type Component struct {
	Draw func()
}

Component component to be injected in entities for manual rendering. TODO: {lpf} useless for now.

func (*Component) Render

func (v *Component) Render() *Component

Render to satisfy an interface

type Context

type Context struct {
	// contains filtered or unexported fields
}

Context rendering context to be used on gorge systems.

func FromContext

func FromContext(g *gorge.Context) *Context

FromContext returns a Context from gorge Context triggers an error and returns nil if doesn't exists.

type EventStat

type EventStat struct {
	VAOs           int
	VBOs           int
	Textures       int
	Shaders        int
	Instances      int
	Buffers        int
	RenderDuration time.Duration
	DrawCalls      int
}

EventStat track gpu resources for debugging

type Light

type Light interface {
	Mat4() gm.Mat4
	Light() *gorge.LightComponent
}

Light interface for light composition

type Queue

type Queue struct {
	Sort        int
	Renderables []*RenderableGroup
}

Queue renderer queue.

type Render

type Render struct {
	Cameras     setlist.SetList[Camera]
	Lights      setlist.SetList[Light]
	Renderables []*RenderableGroup

	DrawCalls     int
	DisableRender bool

	// Or Renderer Render
	InitStage   StepFunc
	RenderStage StepFunc
	// contains filtered or unexported fields
}

Render thing

func (*Render) AddCamera

func (r *Render) AddCamera(camera Camera)

AddCamera adds a camera.

func (*Render) AddLight

func (r *Render) AddLight(light Light)

AddLight adds a light to the light list.

func (*Render) AddRenderable

func (r *Render) AddRenderable(re Renderable)

AddRenderable adds a renderable instance

func (*Render) Draw

func (r *Render) Draw(mode gl.Enum, v *VBO, count uint32)

Draw the main draw function

func (*Render) GetVBO

func (r *Render) GetVBO(mesh *gorge.Mesh) *VBO

GetVBO returns a VBO based on mesher

func (*Render) Gorge

func (r *Render) Gorge() *gorge.Context

Gorge returns the gorge context.

func (*Render) Init

func (r *Render) Init()

Init initializes the renderer by calling the proper stages and etc...

func (*Render) NewBuffer

func (r *Render) NewBuffer(target, usage gl.Enum) Bufferer

NewBuffer creates and returns a new buffer.

func (*Render) NewShader

func (r *Render) NewShader(gs *gorge.ShaderData) *Shader

NewShader returns a shader based on ShaderData

func (*Render) PassShadow

func (r *Render) PassShadow(ri *Step, s *Shader)

PassShadow passes geometry with a specific shader TODO: we are checking DisableShadow here

func (*Render) RemoveCamera

func (r *Render) RemoveCamera(camera Camera)

RemoveCamera removes a specific camera if exists.

func (*Render) RemoveLight

func (r *Render) RemoveLight(light Light)

RemoveLight if exists.

func (*Render) RemoveRenderable

func (r *Render) RemoveRenderable(re Renderable)

RemoveRenderable remove to renderable renderable

func (*Render) Render

func (r *Render) Render()

Render starts the render pipeline

func (*Render) SetInitStage

func (r *Render) SetInitStage(s StepFunc)

SetInitStage sets Init stage for renderer, used to prepare stuff.

func (*Render) SetRenderStage

func (r *Render) SetRenderStage(s StepFunc)

SetRenderStage sets the renderer stage.

func (*Render) SetupShader

func (r *Render) SetupShader(
	ri *Step,
	re Renderable,
)

SetupShader sets the current material uniforms

TODO: {lpf} Maybe set on renderable only since we could use it in render pipeline to draw the sky box

type Renderable

type Renderable interface {
	Mat4() gm.Mat4
	Renderable() *gorge.RenderableComponent
}

Renderable the renderer renderable component interface.

type RenderableGroup

type RenderableGroup struct {

	// Instances
	Instances setlist.SetList[Renderable]
	// Count is the number of ACTIVE renderable in this group
	Count uint32
	// contains filtered or unexported fields
}

RenderableGroup represents instance set of renderables

func (*RenderableGroup) Add

func (rg *RenderableGroup) Add(r Renderable)

Add adds a new instance to this set.

func (*RenderableGroup) Destroy

func (rg *RenderableGroup) Destroy()

Destroy unreferences all resources on this group.

func (*RenderableGroup) Front

func (rg *RenderableGroup) Front() Renderable

Front returns the first Renderable on this group.

func (*RenderableGroup) Remove

func (rg *RenderableGroup) Remove(r Renderable)

Remove removes an instance from this set.

func (*RenderableGroup) Renderable

func (rg *RenderableGroup) Renderable() *gorge.RenderableComponent

Renderable returns the renderable component for this instance.

func (*RenderableGroup) Update

func (rg *RenderableGroup) Update(s *Step)

Update updates any related gpu buffer on the group based on pass we update the group with the pass render number which might be updated

func (*RenderableGroup) VAO

func (rg *RenderableGroup) VAO(shader *Shader) gl.VertexArray

VAO returns an existing VAO for shader hash, if vao doesn't exists it will create one and bind attributes there might be different VAO's per shader as some shaders might not care for normals vertexbuffers etc.

func (*RenderableGroup) VBO

func (rg *RenderableGroup) VBO() *VBO

VBO returns the renderable VBO.

type Shader

type Shader struct {
	Name string // debug purposes
	// contains filtered or unexported fields
}

Shader handle gl program, it holds a local State

func (*Shader) Attrib

func (s *Shader) Attrib(k string) (gl.Attrib, bool)

Attrib returns the attribute for name

func (*Shader) Bind

func (s *Shader) Bind()

Bind binds the shader's program

func (*Shader) Set

func (s *Shader) Set(k string, v any)

Set sets a uniform value

type Step

type Step struct {
	RenderNumber int
	Viewport     gm.Vec4

	CameraUBO *bufutil.NamedOffset

	// Current rendering camera.
	Camera Camera
	Lights []Light

	QueuesIndex []int
	Queues      map[int]*Queue

	StencilDirty bool

	// Global specified uniforms, could be fetch from camera
	// or directly on props
	Projection gm.Mat4
	View       gm.Mat4
	CamPos     gm.Vec3
	Ambient    gm.Vec3

	// Global props that will be set in every material
	// As in, defaults
	Ubos     map[string]gl.Buffer
	Props    map[string]any
	Samplers map[string]*Texture
}

Step holds information about a render Step.

type StepFunc

type StepFunc func(ri *Step)

StepFunc func that will render.

type Texture

type Texture struct {
	ID   gl.Texture
	Type gl.Enum // gl.TEXTURE_2D, gl.TEXTURE_CUBE etc.. defaults to 2D
	// contains filtered or unexported fields
}

Texture is a opengl texture controller

type VBO

type VBO struct {
	Format      gorge.VertexFormat
	FrontFacing gorge.FrontFacing

	ElementsLen  uint32
	ElementsType gl.Enum
	VertexLen    uint32
	// contains filtered or unexported fields
}

VBO vertexBufferObject.

func (*VBO) Bind

func (v *VBO) Bind()

Bind binds both vertex and element buffer

func (*VBO) BindAttribs

func (v *VBO) BindAttribs(s *Shader)

BindAttribs Back named attribs please

Directories

Path Synopsis
Package bufutil provides means to cache and write into underlying gpu buffers
Package bufutil provides means to cache and write into underlying gpu buffers
nolint: revive
nolint: revive
Package renderpl contains default rendering pipeline for gorge
Package renderpl contains default rendering pipeline for gorge

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL