mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-02-22 07:50:08 +01:00
Fixed stencil tests for directx
This commit is contained in:
parent
dbe06ec468
commit
dc6074bec9
@ -518,30 +518,30 @@ func (g *graphics11) removeShader(s *shader11) {
|
|||||||
func (g *graphics11) setAsRenderTargets(dsts []*image11, useStencil bool) error {
|
func (g *graphics11) setAsRenderTargets(dsts []*image11, useStencil bool) error {
|
||||||
var rtvs []*_ID3D11RenderTargetView
|
var rtvs []*_ID3D11RenderTargetView
|
||||||
var dsv *_ID3D11DepthStencilView
|
var dsv *_ID3D11DepthStencilView
|
||||||
for _, i := range dsts {
|
for _, dst := range dsts {
|
||||||
// Ignore a nil image in case of MRT
|
// Ignore a nil image in case of MRT
|
||||||
if i == nil {
|
if dst == nil {
|
||||||
rtvs = append(rtvs, nil)
|
rtvs = append(rtvs, nil)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if i.renderTargetView == nil {
|
if dst.renderTargetView == nil {
|
||||||
rtv, err := g.device.CreateRenderTargetView(unsafe.Pointer(i.texture), nil)
|
rtv, err := g.device.CreateRenderTargetView(unsafe.Pointer(dst.texture), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
i.renderTargetView = rtv
|
dst.renderTargetView = rtv
|
||||||
}
|
}
|
||||||
rtvs = append(rtvs, i.renderTargetView)
|
rtvs = append(rtvs, dst.renderTargetView)
|
||||||
|
|
||||||
if !useStencil || dsv != nil {
|
if !useStencil || dsv != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if i.screen {
|
if dst.screen {
|
||||||
return fmt.Errorf("directx: a stencil buffer is not available for a screen image")
|
return fmt.Errorf("directx: a stencil buffer is not available for a screen image")
|
||||||
}
|
}
|
||||||
if i.stencil == nil {
|
if dst.stencil == nil {
|
||||||
w, h := i.internalSize()
|
w, h := dst.internalSize()
|
||||||
s, err := g.device.CreateTexture2D(&_D3D11_TEXTURE2D_DESC{
|
s, err := g.device.CreateTexture2D(&_D3D11_TEXTURE2D_DESC{
|
||||||
Width: uint32(w),
|
Width: uint32(w),
|
||||||
Height: uint32(h),
|
Height: uint32(h),
|
||||||
@ -560,16 +560,16 @@ func (g *graphics11) setAsRenderTargets(dsts []*image11, useStencil bool) error
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
i.stencil = s
|
dst.stencil = s
|
||||||
}
|
}
|
||||||
if i.stencilView == nil {
|
if dst.stencilView == nil {
|
||||||
sv, err := g.device.CreateDepthStencilView(unsafe.Pointer(i.stencil), nil)
|
sv, err := g.device.CreateDepthStencilView(unsafe.Pointer(dst.stencil), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
i.stencilView = sv
|
dst.stencilView = sv
|
||||||
dsv = sv
|
|
||||||
}
|
}
|
||||||
|
dsv = dst.stencilView
|
||||||
}
|
}
|
||||||
|
|
||||||
g.deviceContext.OMSetRenderTargets(rtvs, dsv)
|
g.deviceContext.OMSetRenderTargets(rtvs, dsv)
|
||||||
|
@ -1084,7 +1084,7 @@ func (g *graphics12) NewShader(program *shaderir.Program) (graphicsdriver.Shader
|
|||||||
|
|
||||||
func (g *graphics12) setAsRenderTargets(dsts []*image12, useStencil bool) error {
|
func (g *graphics12) setAsRenderTargets(dsts []*image12, useStencil bool) error {
|
||||||
var rtvs []_D3D12_CPU_DESCRIPTOR_HANDLE
|
var rtvs []_D3D12_CPU_DESCRIPTOR_HANDLE
|
||||||
var dsvPtr *_D3D12_CPU_DESCRIPTOR_HANDLE
|
var dsv *_D3D12_CPU_DESCRIPTOR_HANDLE
|
||||||
|
|
||||||
for i, img := range dsts {
|
for i, img := range dsts {
|
||||||
// Ignore a nil image in case of MRT
|
// Ignore a nil image in case of MRT
|
||||||
@ -1127,18 +1127,18 @@ func (g *graphics12) setAsRenderTargets(dsts []*image12, useStencil bool) error
|
|||||||
rtv := rtvBase
|
rtv := rtvBase
|
||||||
rtvs = append(rtvs, rtv)
|
rtvs = append(rtvs, rtv)
|
||||||
|
|
||||||
if !useStencil || dsvPtr != nil {
|
if !useStencil || dsv != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := img.ensureDepthStencilView(g.device); err != nil {
|
if err := img.ensureDepthStencilView(g.device); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dsv, err := img.dsvDescriptorHeap.GetCPUDescriptorHandleForHeapStart()
|
sv, err := img.dsvDescriptorHeap.GetCPUDescriptorHandleForHeapStart()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
dsvPtr = &dsv
|
dsv = &sv
|
||||||
}
|
}
|
||||||
|
|
||||||
if !useStencil {
|
if !useStencil {
|
||||||
@ -1147,8 +1147,8 @@ func (g *graphics12) setAsRenderTargets(dsts []*image12, useStencil bool) error
|
|||||||
}
|
}
|
||||||
|
|
||||||
g.drawCommandList.OMSetStencilRef(0)
|
g.drawCommandList.OMSetStencilRef(0)
|
||||||
g.drawCommandList.OMSetRenderTargets(rtvs, false, dsvPtr)
|
g.drawCommandList.OMSetRenderTargets(rtvs, false, dsv)
|
||||||
g.drawCommandList.ClearDepthStencilView(*dsvPtr, _D3D12_CLEAR_FLAG_STENCIL, 0, 0, nil)
|
g.drawCommandList.ClearDepthStencilView(*dsv, _D3D12_CLEAR_FLAG_STENCIL, 0, 0, nil)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user