Forráskód Böngészése

Some more pixel formats

Karl Zylinski 6 hónapja
szülő
commit
1514df190e
5 módosított fájl, 61 hozzáadás és 50 törlés
  1. 4 4
      examples/snake/snake.odin
  2. 13 10
      karl2d.doc.odin
  3. 32 26
      karl2d.odin
  4. 11 9
      render_backend_d3d11.odin
  5. 1 1
      render_backend_interface.odin

+ 4 - 4
examples/snake/snake.odin

@@ -82,10 +82,10 @@ main :: proc() {
 	SHADER_SOURCE :: #load("shader.hlsl")
 
 	shader := k2.load_shader(string(SHADER_SOURCE), {
-		.RG32_Float,
-		.RG32_Float,
-		.RGBA8_Norm,
-		.RG32_Float,
+		.RG_32_Float,
+		.RG_32_Float,
+		.RGBA_8_Norm,
+		.RG_32_Float,
 	})
 
 	prev_time := time.now()

+ 13 - 10
karl2d.doc.odin

@@ -124,7 +124,7 @@ destroy_texture :: proc(tex: Texture)
 //---------//
 // SHADERS //
 //---------//
-load_shader :: proc(shader_source: string, layout_formats: []Shader_Input_Format = {}) -> Shader
+load_shader :: proc(shader_source: string, layout_formats: []Pixel_Format = {}) -> Shader
 
 destroy_shader :: proc(shader: Shader)
 
@@ -136,7 +136,7 @@ set_shader_constant :: proc(shd: Shader, loc: Shader_Constant_Location, val: any
 
 override_shader_input :: proc(shader: Shader, input: int, val: any)
 
-shader_input_format_size :: proc(f: Shader_Input_Format) -> int
+pixel_format_size :: proc(f: Pixel_Format) -> int
 
 //-------------------------------//
 // CAMERA AND COORDINATE SYSTEMS //
@@ -284,7 +284,7 @@ Shader_Input :: struct {
 	name: string,
 	register: int,
 	type: Shader_Input_Type,
-	format: Shader_Input_Format,
+	format: Pixel_Format,
 }
 
 Shader_Constant_Location :: struct {
@@ -292,14 +292,17 @@ Shader_Constant_Location :: struct {
 	offset: u32,
 }
 
-Shader_Input_Format :: enum {
+Pixel_Format :: enum {
 	Unknown,
-	RGBA32_Float,
-	RGBA8_Norm,
-	RGBA8_Norm_SRGB,
-	RGB32_Float,
-	RG32_Float,
-	R32_Float,
+	
+	RGBA_32_Float,
+	RGB_32_Float,
+	RG_32_Float,
+	R_32_Float,
+
+	RGBA_8_Norm,
+	RG_8_Norm,
+	R_8_Norm,
 }
 
 Handle :: hm.Handle

+ 32 - 26
karl2d.odin

@@ -558,7 +558,7 @@ destroy_texture :: proc(tex: Texture) {
 // SHADERS //
 //---------//
 
-load_shader :: proc(shader_source: string, layout_formats: []Shader_Input_Format = {}) -> Shader {
+load_shader :: proc(shader_source: string, layout_formats: []Pixel_Format = {}) -> Shader {
 	handle, desc := rb.load_shader(shader_source, context.temp_allocator, layout_formats)
 
 	if handle == SHADER_NONE {
@@ -611,7 +611,7 @@ load_shader :: proc(shader_source: string, layout_formats: []Shader_Input_Format
 			shd.default_input_offsets[default_format] = input_offset
 		}
 		
-		input_offset += shader_input_format_size(input.format)
+		input_offset += pixel_format_size(input.format)
 	}
 
 	shd.vertex_size = input_offset
@@ -691,15 +691,18 @@ override_shader_input :: proc(shader: Shader, input: int, val: any) {
 	o.used = sz
 }
 
-shader_input_format_size :: proc(f: Shader_Input_Format) -> int {
+pixel_format_size :: proc(f: Pixel_Format) -> int {
 	switch f {
 	case .Unknown: return 0
-	case .RGBA32_Float: return 32
-	case .RGBA8_Norm: return 4
-	case .RGBA8_Norm_SRGB: return 4
-	case .RGB32_Float: return 12
-	case .RG32_Float: return 8
-	case .R32_Float: return 4
+
+	case .RGBA_32_Float: return 32
+	case .RGB_32_Float: return 12
+	case .RG_32_Float: return 8
+	case .R_32_Float: return 4
+
+	case .RGBA_8_Norm: return 4
+	case .RG_8_Norm: return 2
+	case .R_8_Norm: return 1
 	}
 
 	return 0
@@ -903,7 +906,7 @@ Shader_Input :: struct {
 	name: string,
 	register: int,
 	type: Shader_Input_Type,
-	format: Shader_Input_Format,
+	format: Pixel_Format,
 }
 
 Shader_Constant_Location :: struct {
@@ -911,14 +914,17 @@ Shader_Constant_Location :: struct {
 	offset: u32,
 }
 
-Shader_Input_Format :: enum {
+Pixel_Format :: enum {
 	Unknown,
-	RGBA32_Float,
-	RGBA8_Norm,
-	RGBA8_Norm_SRGB,
-	RGB32_Float,
-	RG32_Float,
-	R32_Float,
+	
+	RGBA_32_Float,
+	RGB_32_Float,
+	RG_32_Float,
+	R_32_Float,
+
+	RGBA_8_Norm,
+	RG_8_Norm,
+	R_8_Norm,
 }
 
 Handle :: hm.Handle
@@ -1128,7 +1134,7 @@ batch_vertex :: proc(v: Vec2, uv: Vec2, color: Color) {
 	override_offset: int
 	for &o, idx in shd.input_overrides {
 		input := &shd.inputs[idx]
-		sz := shader_input_format_size(input.format)
+		sz := pixel_format_size(input.format)
 
 		if o.used != 0 {
 			mem.copy(&s.vertex_buffer_cpu[base_offset + override_offset], raw_data(&o.val), o.used)
@@ -1176,23 +1182,23 @@ get_shader_input_default_type :: proc(name: string, type: Shader_Input_Type) ->
 	return .Unknown
 }
 
-get_shader_input_format :: proc(name: string, type: Shader_Input_Type) -> Shader_Input_Format {
+get_shader_input_format :: proc(name: string, type: Shader_Input_Type) -> Pixel_Format {
 	default_type := get_shader_input_default_type(name, type)
 
 	if default_type != .Unknown {
 		switch default_type {
-		case .Position: return .RG32_Float
-		case .UV: return .RG32_Float
-		case .Color: return .RGBA8_Norm
+		case .Position: return .RG_32_Float
+		case .UV: return .RG_32_Float
+		case .Color: return .RGBA_8_Norm
 		case .Unknown: unreachable()
 		}
 	}
 
 	switch type {
-	case .F32: return .R32_Float
-	case .Vec2: return .RG32_Float
-	case .Vec3: return .RGB32_Float
-	case .Vec4: return .RGBA32_Float
+	case .F32: return .R_32_Float
+	case .Vec2: return .RG_32_Float
+	case .Vec3: return .RGB_32_Float
+	case .Vec4: return .RGBA_32_Float
 	}
 
 	return .Unknown

+ 11 - 9
render_backend_d3d11.odin

@@ -341,7 +341,7 @@ d3d11_destroy_texture :: proc(th: Texture_Handle) {
 	hm.remove(&s.textures, th)
 }
 
-d3d11_load_shader :: proc(shader_source: string, desc_allocator := context.temp_allocator, layout_formats: []Shader_Input_Format = {}) -> (handle: Shader_Handle, desc: Shader_Desc) {
+d3d11_load_shader :: proc(shader_source: string, desc_allocator := context.temp_allocator, layout_formats: []Pixel_Format = {}) -> (handle: Shader_Handle, desc: Shader_Desc) {
 	vs_blob: ^d3d11.IBlob
 	vs_blob_errors: ^d3d11.IBlob
 	ch(d3d_compiler.Compile(raw_data(shader_source), len(shader_source), nil, nil, nil, "vs_main", "vs_5_0", 0, 0, &vs_blob, &vs_blob_errors))
@@ -468,7 +468,7 @@ d3d11_load_shader :: proc(shader_source: string, desc_allocator := context.temp_
 		input := desc.inputs[idx]
 		input_layout_desc[idx] = {
 			SemanticName = temp_cstring(input.name),
-			Format = dxgi_format_from_shader_input_format(input.format),
+			Format = dxgi_format_from_pixel_format(input.format),
 			AlignedByteOffset = idx == 0 ? 0 : d3d11.APPEND_ALIGNED_ELEMENT,
 			InputSlotClass = .VERTEX_DATA,
 		}
@@ -613,15 +613,17 @@ D3D11_Texture :: struct {
 	view: ^d3d11.IShaderResourceView,
 }
 
-dxgi_format_from_shader_input_format :: proc(f: Shader_Input_Format) -> dxgi.FORMAT {
+dxgi_format_from_pixel_format :: proc(f: Pixel_Format) -> dxgi.FORMAT {
 	switch f {
 	case .Unknown: return .UNKNOWN
-	case .RGBA32_Float: return .R32G32B32A32_FLOAT
-	case .RGBA8_Norm: return .R8G8B8A8_UNORM
-	case .RGBA8_Norm_SRGB: return .R8G8B8A8_UNORM_SRGB
-	case .RGB32_Float: return .R32G32B32_FLOAT
-	case .RG32_Float: return .R32G32_FLOAT
-	case .R32_Float: return .R32_FLOAT
+	case .RGBA_32_Float: return .R32G32B32A32_FLOAT
+	case .RGB_32_Float: return .R32G32B32_FLOAT
+	case .RG_32_Float: return .R32G32_FLOAT
+	case .R_32_Float: return .R32_FLOAT
+
+	case .RGBA_8_Norm: return .R8G8B8A8_UNORM
+	case .RG_8_Norm: return .R8G8_UNORM
+	case .R_8_Norm: return .R8_UNORM
 	}
 
 	log.error("Unknown format")

+ 1 - 1
render_backend_interface.odin

@@ -28,7 +28,7 @@ Render_Backend_Interface :: struct {
 	load_texture: proc(data: []u8, width: int, height: int) -> Texture_Handle,
 	destroy_texture: proc(handle: Texture_Handle),
 
-	load_shader: proc(shader_source: string, desc_allocator := context.temp_allocator, layout_formats: []Shader_Input_Format = {}) -> (handle: Shader_Handle, desc: Shader_Desc),
+	load_shader: proc(shader_source: string, desc_allocator := context.temp_allocator, layout_formats: []Pixel_Format = {}) -> (handle: Shader_Handle, desc: Shader_Desc),
 	destroy_shader: proc(shader: Shader_Handle),
 
 	resize_swapchain: proc(width, height: int),