Mtasa-blue: dxSetRenderTarget clears drawing queue when called in onClientPreRender

Created on 22 Oct 2020  路  3Comments  路  Source: multitheftauto/mtasa-blue

Describe the bug

using dxSetRenderTarget(...) clears the drawing quene when called in onClientPreRender event
this can also break the drawing of other resources too

To reproduce

local renderTarget = dxCreateRenderTarget(100, 100, true)

addEventHandler("onClientPreRender", root,
    function()
        dxDrawRectangle(10, 300, 100, 100) --> not drawn
        dxDrawRectangle(110, 300, 100, 100) --> not drawn
        dxDrawRectangle(210, 300, 100, 100) --> not drawn

        dxSetRenderTarget(renderTarget, true)
        dxSetRenderTarget()

        dxDrawRectangle(10, 400, 100, 100) --> drawn
        dxDrawRectangle(110, 400, 100, 100) --> drawn
        dxDrawRectangle(210, 400, 100, 100) --> drawn
    end
)

Expected behaviour

dxSetRenderTarget shouldn't clear the entire drawing quene when called in onClientPreRender

Version

Multi Theft Auto v1.5.8-release-20670

bug

Most helpful comment

I cannot replicate. Code:

function render()
    dxDrawRectangle(250, 200, 50, 50, 0xFF00FF00)-- Green

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(250, 250, 50, 50, 0xFFAAFF00)-- Lime Green
end

function prerender()
    dxDrawRectangle(200, 200, 50, 50, 0xFFFF0000)-- Red

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(200, 250, 50, 50, 0xFFFFAA00)-- Orange
end

local renderTarget = dxCreateRenderTarget(50, 50, true)

addEventHandler("onClientRender", root, render)
addEventHandler("onClientPreRender", root, prerender)

because your renderTarget is a nil value
you can't define a local variable after the functions
or it is invisible for the functions

All 3 comments

I cannot replicate. Code:

function render()
    dxDrawRectangle(250, 200, 50, 50, 0xFF00FF00)-- Green

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(250, 250, 50, 50, 0xFFAAFF00)-- Lime Green
end

function prerender()
    dxDrawRectangle(200, 200, 50, 50, 0xFFFF0000)-- Red

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(200, 250, 50, 50, 0xFFFFAA00)-- Orange
end

local renderTarget = dxCreateRenderTarget(50, 50, true)

addEventHandler("onClientRender", root, render)
addEventHandler("onClientPreRender", root, prerender)

Ingame:

image

I cannot replicate. Code:

function render()
    dxDrawRectangle(250, 200, 50, 50, 0xFF00FF00)-- Green

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(250, 250, 50, 50, 0xFFAAFF00)-- Lime Green
end

function prerender()
    dxDrawRectangle(200, 200, 50, 50, 0xFFFF0000)-- Red

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(200, 250, 50, 50, 0xFFFFAA00)-- Orange
end

local renderTarget = dxCreateRenderTarget(50, 50, true)

addEventHandler("onClientRender", root, render)
addEventHandler("onClientPreRender", root, prerender)

because your renderTarget is a nil value
you can't define a local variable after the functions
or it is invisible for the functions

Can confirm with the above code fixed:


Code

local renderTarget = dxCreateRenderTarget(50, 50, true)

function render()
    dxDrawRectangle(250, 200, 50, 50, 0xFF00FF00)-- Green

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(250, 250, 50, 50, 0xFFAAFF00)-- Lime Green
end

function prerender()
    dxDrawRectangle(200, 200, 50, 50, 0xFFFF0000)-- Red

    dxSetRenderTarget(renderTarget, true)
    dxSetRenderTarget()

    dxDrawRectangle(200, 250, 50, 50, 0xFFFFAA00)-- Orange
end


addEventHandler("onClientRender", root, render)
addEventHandler("onClientPreRender", root, prerender)

image
The red rectangle is missing from the top left corner section.
I'll look into the issue. Im lazy.

Was this page helpful?
0 / 5 - 0 ratings