UI Windows slowly working
This commit is contained in:
@@ -44,6 +44,7 @@ Backend_Shader :: struct {
|
||||
Rasterizer_State :: struct {
|
||||
fill: bool;
|
||||
cull_face: Cull_Face;
|
||||
scissor_test: bool;
|
||||
state: *ID3D11RasterizerState;
|
||||
}
|
||||
|
||||
@@ -64,6 +65,7 @@ D3D11_Backend :: struct {
|
||||
|
||||
fill: bool = true;
|
||||
cull_face: Cull_Face = .BACK;
|
||||
scissor_test: bool = false;
|
||||
}
|
||||
|
||||
create_backend :: (w: *Window) -> *D3D11_Backend {
|
||||
@@ -253,10 +255,10 @@ init_device :: (hwnd: HWND, using renderer: *D3D11_Backend) -> bool {
|
||||
|
||||
array_reserve(*renderer.rasterizer_states, 8);
|
||||
|
||||
create_rasterizer_state(renderer, true, .BACK);
|
||||
create_rasterizer_state(renderer, false, .BACK);
|
||||
create_rasterizer_state(renderer, true, .FRONT);
|
||||
create_rasterizer_state(renderer, false, .FRONT);
|
||||
create_rasterizer_state(renderer, true, .BACK, false);
|
||||
create_rasterizer_state(renderer, false, .BACK, false);
|
||||
create_rasterizer_state(renderer, true, .FRONT, false);
|
||||
create_rasterizer_state(renderer, false, .FRONT, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1266,13 +1268,13 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) {
|
||||
if it.set_draw_mode.draw_mode == {
|
||||
case .FILL;
|
||||
{
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, true, d3d_renderer.cull_face);
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, true, d3d_renderer.cull_face, d3d_renderer.scissor_test);
|
||||
d3d_renderer.fill = true;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
}
|
||||
case .WIREFRAME;
|
||||
{
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, false, d3d_renderer.cull_face);
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, false, d3d_renderer.cull_face, d3d_renderer.scissor_test);
|
||||
d3d_renderer.fill = false;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
}
|
||||
@@ -1282,19 +1284,19 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) {
|
||||
if it.set_cull_face.cull_face == {
|
||||
case .FRONT;
|
||||
{
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, d3d_renderer.fill, .FRONT);
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, d3d_renderer.fill, .FRONT, d3d_renderer.scissor_test);
|
||||
d3d_renderer.cull_face = .FRONT;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
}
|
||||
case .BACK;
|
||||
{
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, d3d_renderer.fill, .BACK);
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, d3d_renderer.fill, .BACK, d3d_renderer.scissor_test);
|
||||
d3d_renderer.cull_face = .BACK;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
}
|
||||
case .NONE;
|
||||
{
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, d3d_renderer.fill, .NONE);
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, d3d_renderer.fill, .NONE, d3d_renderer.scissor_test);
|
||||
d3d_renderer.cull_face = .NONE;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
}
|
||||
@@ -1370,6 +1372,20 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) {
|
||||
vp.TopLeftX = xx it.set_viewport.x;
|
||||
vp.TopLeftY = xx it.set_viewport.y;
|
||||
ID3D11DeviceContext_RSSetViewports(d3d_context, 1, *vp);
|
||||
case .SET_SCISSOR;
|
||||
rect : D3D11_RECT;
|
||||
rect.left = xx it.set_scissor.x;
|
||||
rect.right = xx (it.set_scissor.x + it.set_scissor.width);
|
||||
rect.top = xx it.set_scissor.y;
|
||||
rect.bottom = xx (it.set_scissor.y + it.set_scissor.height);
|
||||
ID3D11DeviceContext_RSSetScissorRects(d3d_context, 1, *rect);
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, true, d3d_renderer.cull_face, true);
|
||||
d3d_renderer.scissor_test = true;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
case .CLEAR_SCISSOR;
|
||||
state := get_or_create_rasterizer_state(d3d_renderer, true, d3d_renderer.cull_face, false);
|
||||
d3d_renderer.scissor_test = false;
|
||||
ID3D11DeviceContext_RSSetState(d3d_context, state.state);
|
||||
case .DRAW;
|
||||
if it.draw.topology == {
|
||||
case .TRIANGLE_LIST;
|
||||
@@ -1426,6 +1442,7 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) {
|
||||
}
|
||||
}
|
||||
|
||||
d3d_renderer.scissor_test = false;
|
||||
|
||||
now := seconds_since_init();
|
||||
engine.renderer.last_render_time_cpu = cast(float)(now - time) * 1000.0;
|
||||
@@ -1446,17 +1463,17 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) {
|
||||
}
|
||||
|
||||
#scope_file
|
||||
get_or_create_rasterizer_state :: (backend: *D3D11_Backend, fill: bool, cull_face: Cull_Face) -> *Rasterizer_State {
|
||||
get_or_create_rasterizer_state :: (backend: *D3D11_Backend, fill: bool, cull_face: Cull_Face, scissor_test: bool) -> *Rasterizer_State {
|
||||
for * backend.rasterizer_states {
|
||||
if it.fill == fill && it.cull_face == cull_face {
|
||||
if it.fill == fill && it.cull_face == cull_face && it.scissor_test == scissor_test {
|
||||
return it;
|
||||
}
|
||||
}
|
||||
|
||||
return create_rasterizer_state(backend, fill, cull_face);
|
||||
return create_rasterizer_state(backend, fill, cull_face, scissor_test);
|
||||
}
|
||||
|
||||
create_rasterizer_state :: (backend: *D3D11_Backend, fill: bool, cull_face: Cull_Face) -> *Rasterizer_State {
|
||||
create_rasterizer_state :: (backend: *D3D11_Backend, fill: bool, cull_face: Cull_Face, scissor_test: bool) -> *Rasterizer_State {
|
||||
raster_desc : D3D11_RASTERIZER_DESC;
|
||||
raster_desc.AntialiasedLineEnable = .FALSE;
|
||||
|
||||
@@ -1481,7 +1498,7 @@ create_rasterizer_state :: (backend: *D3D11_Backend, fill: bool, cull_face: Cull
|
||||
|
||||
raster_desc.FrontCounterClockwise = .FALSE;
|
||||
raster_desc.MultisampleEnable = .FALSE;
|
||||
raster_desc.ScissorEnable = .FALSE;
|
||||
raster_desc.ScissorEnable = ifx scissor_test then .TRUE else .FALSE;
|
||||
raster_desc.SlopeScaledDepthBias = 0.0;
|
||||
|
||||
state : *ID3D11RasterizerState;
|
||||
|
||||
Reference in New Issue
Block a user