Ianec21 Posted April 4, 2021 Share Posted April 4, 2021 (edited) Hello! How can I draw a render target, but with rounded corners? Edited April 4, 2021 by Ianec21 Link to comment
XaskeL Posted April 5, 2021 Share Posted April 5, 2021 -- Author: XaskeL -- Created 06/05/2021 -- https://forum.multitheftauto.com/topic/130202-question-dx-render-target-rounded-corners/ local SHADER_CODE = base64Decode( "AQn//gABAAAAAAAAAwAAAAEAAAAwAAAAAAAAAAAAAAAEAAAAAQAAAAAAgD8AAIA/AACAPwAAgD8GAAAAY29sb3IArAADAAAAAAAAAFwAAAAAAAAAAAAAAAEAAAABAAAAUrgePgcAAAByYWRpdXMAAAMAAAAAAAAAiAAAAAAAAAAAAAAAAQAAAAEAAAAK16M7CwAAAGJvcmRlclNvZnQAAAEAAAAAAAAAuAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAEQAAAGNvbG9yT3ZlcndyaXR0ZW4AAAAAAQAAAA8AAAAEAAAAAAAAAAAAAAAAAAAAAwAAAFAwAAAMAAAAcm5kUmVjdFRlY2gABAAAAAEAAAACAAAAAgAAAAQAAAAgAAAAAAAAAAAAAAA8AAAAWAAAAAAAAAAAAAAAaAAAAIQAAAAAAAAAAAAAAJgAAAC0AAAAAAAAAAAAAADwAAAAAAAAAAEAAADoAAAAAAAAAAEAAACTAAAAAAAAANQAAADQAAAAAAAAAAEAAAAAAAAAAAAAAP////8AAAAAAAAAAGgHAAABAv///v9HAENUQUIcAAAA5wAAAAEC//8DAAAAHAAAAAAAACDgAAAAWAAAAAIABgABAAAAZAAAAHQAAACEAAAAAgAFAAEAAACMAAAAnAAAAKwAAAACAAcAAQAAAMAAAADQAAAAYm9yZGVyU29mdACrAAADAAEAAQABAAAAAAAAAArXozsAAAAAAAAAAAAAAABjb2xvcgCrqwEAAwABAAQAAQAAAAAAAAAAAIA/AACAPwAAgD8AAIA/Y29sb3JPdmVyd3JpdHRlbgCrq6sAAAEAAQABAAEAAAAAAAAAAACAPwAAAAAAAAAAAAAAAHBzXzJfYQBNaWNyb3NvZnQgKFIpIEhMU0wgU2hhZGVyIENvbXBpbGVyIDkuMjcuOTUyLjMwMjIA/v/TAFBSRVMBAlhG/v9DAENUQUIcAAAA1wAAAAECWEYDAAAAHAAAAAABACDUAAAAWAAAAAIAAgABAAAAZAAAAHQAAACEAAAAAgAAAAEAAACMAAAAnAAAAKwAAAACAAEAAQAAALQAAADEAAAAYm9yZGVyU29mdACrAAADAAEAAQABAAAAAAAAAArXozsAAAAAAAAAAAAAAABjb2xvcgCrqwEAAwABAAQAAQAAAAAAAAAAAIA/AACAPwAAgD8AAIA/cmFkaXVzAKsAAAMAAQABAAEAAAAAAAAAUrgePgAAAAAAAAAAAAAAAHR4AE1pY3Jvc29mdCAoUikgSExTTCBTaGFkZXIgQ29tcGlsZXIgOS4yNy45NTIuMzAyMgD+/wwAUFJTSQAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAAAAAA/v8iAENMSVQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAD+/1sARlhMQwkAAAABAFCgAgAAAAAAAAACAAAABAAAAAAAAAABAAAADAAAAAAAAAAHAAAAAAAAAAEAEBABAAAAAAAAAAcAAAAAAAAAAAAAAAcAAAAEAAAAAQBAoAIAAAAAAAAABwAAAAQAAAAAAAAAAQAAAAwAAAAAAAAABAAAAAQAAAABABAQAQAAAAAAAAACAAAACAAAAAAAAAAHAAAAAQAAAAEAQKACAAAAAAAAAAcAAAABAAAAAAAAAAcAAAAAAAAAAAAAAAQAAAAIAAAAAQAAEAEAAAAAAAAABwAAAAAAAAAAAAAABAAAAAAAAAABADAQAQAAAAAAAAACAAAACAAAAAAAAAAEAAAADAAAAAMAEKACAAAAAAAAAAEAAAANAAAAAAAAAAIAAAAAAAAAAAAAAAcAAAAAAAAAAwAAoAIAAAAAAAAAAQAAAA4AAAAAAAAABwAAAAAAAAAAAAAABAAAABAAAADw8PDwDw8PD///AABRAAAFCAAPoAAAAD8AAAAAAACAPwAAAIAfAAACAAAAgAAAA7AfAAACAAAAgAAAD5BcAAACAAAIgAAAVbAGAAACAAABgAAA/4BbAAACAAACgAAAALAFAAADAAABgAAAAIAAAFWABgAAAgAAAYAAAACABQAAAwEAA4AAAACAAAAAsAUAAAMCAAOAAAAAgAgAAKABAAACAwAFgAgA5KAEAAAEAAADgAAAAIADAACAAAAAoQEAAAICAASACAAAoAEAAAIBAASAAABVsAIAAAMBAAeAAQDkgAIA5IEjAAACAQAHgAEA5IACAAADAAAIgAEAqoABAAChAgAAAwEACIAAAP+AAAAAoQIAAAMBAAiAAQD/gAYAAKAEAAAEAQAIgAEA/4ADAAChAwCqgAUAAAMBAAiAAQD/gAUA/6ACAAADAgABgAAA/4ECAACgWAAABAAACIAAAP+ACACqoQgAVaFYAAAEAQAIgAIAAIAFAP+gAQD/gAEAAAIAAASAAQAAoAIAAAMAAAeAAADkgQEA5IACAAADAQABgAAAAIAAAAChAgAAAwEAAYABAACABgAAoAQAAAQBAAGAAQAAgAMAAKEDAKqABQAAAwEAAYABAACABQD/oAIAAAMBAAKAAAAAgQIAAKBYAAAEAQABgAEAVYABAP+AAQAAgFoAAAQAAAKAAADpgAAA6YAIAFWgWAAABAAAAYAAAACAAAD/gAgA/6AHAAACAAACgAAAVYAGAAACAAACgAAAVYACAAADAAAEgAAAVYAAAAChAgAAAwAAAoAAAFWBAgAAoAIAAAMAAASAAACqgAYAAKAEAAAEAAAEgAAAqoADAAChAwCqgAUAAAMAAASAAACqgAUA/6BYAAAEAAACgAAAVYAFAP+gAACqgFgAAAQAABGAAAAAgAEAAIAAAFWABQAAAwAACIAAAACAAAD/kFgAAAQBAAeABwAAoQAA5JADAKqABQAAAwAAB4ABAOSABADkoAEAAAIACA+AAADkgP//AAA" ); local g_pShader = dxCreateShader( SHADER_CODE ); local _dxRenderTarget = dxDrawRectangle; local _tocolor = tocolor; local function dxDrawRectangle( fPosX, fPosY, fWidth, fHeight, vColor, bPostDraw, bRound, fRadius, fBorderSoft ) if ( not bRound ) then _dxRenderTarget( fPosX, fPosY, fWidth, fHeight, vColor, bPostDraw ); else if ( type ( vColor ) == "table" ) then dxSetShaderValue( g_pShader, "radius", fRadius ); dxSetShaderValue( g_pShader, "borderSoft", fBorderSoft ); dxSetShaderValue( g_pShader, "color", vColor ); dxDrawImage( fPosX, fPosY, fWidth, fHeight, g_pShader, 0, 0, 0, -1, bPostDraw ); end end end local function tocolor( iRed, iGreen, iBlue, iAlpha, bToShader ) if ( not bToShader ) then return _tocolor( iRed, iGreen, iBlue, iAlpha ); else return { iRed / 255, iGreen / 255, iBlue / 255, iAlpha / 255 }; end end; local RED = tocolor( 255, 0, 0, 255, true ); addEventHandler( "onClientRender", root, function ( ) dxDrawRectangle( 600, 600, 256, 256, RED, false, true, 0.2, 0.01 ); end ); I took the shader code from DGS and compiled it (for review, I hope thisdp won't mind). You don't have to drag around a huge number of files if you only need to draw the antialiased corners in dxDrawRectangle. Which you yourself can grab into the RenderTarget. 1 Link to comment
Ianec21 Posted April 21, 2021 Author Share Posted April 21, 2021 On 06/04/2021 at 00:20, XaskeL said: -- Author: XaskeL -- Created 06/05/2021 -- https://forum.multitheftauto.com/topic/130202-question-dx-render-target-rounded-corners/ local SHADER_CODE = base64Decode( "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AgAAAwEACIAAAP+AAAAAoQIAAAMBAAiAAQD/gAYAAKAEAAAEAQAIgAEA/4ADAAChAwCqgAUAAAMBAAiAAQD/gAUA/6ACAAADAgABgAAA/4ECAACgWAAABAAACIAAAP+ACACqoQgAVaFYAAAEAQAIgAIAAIAFAP+gAQD/gAEAAAIAAASAAQAAoAIAAAMAAAeAAADkgQEA5IACAAADAQABgAAAAIAAAAChAgAAAwEAAYABAACABgAAoAQAAAQBAAGAAQAAgAMAAKEDAKqABQAAAwEAAYABAACABQD/oAIAAAMBAAKAAAAAgQIAAKBYAAAEAQABgAEAVYABAP+AAQAAgFoAAAQAAAKAAADpgAAA6YAIAFWgWAAABAAAAYAAAACAAAD/gAgA/6AHAAACAAACgAAAVYAGAAACAAACgAAAVYACAAADAAAEgAAAVYAAAAChAgAAAwAAAoAAAFWBAgAAoAIAAAMAAASAAACqgAYAAKAEAAAEAAAEgAAAqoADAAChAwCqgAUAAAMAAASAAACqgAUA/6BYAAAEAAACgAAAVYAFAP+gAACqgFgAAAQAABGAAAAAgAEAAIAAAFWABQAAAwAACIAAAACAAAD/kFgAAAQBAAeABwAAoQAA5JADAKqABQAAAwAAB4ABAOSABADkoAEAAAIACA+AAADkgP//AAA" ); local g_pShader = dxCreateShader( SHADER_CODE ); local _dxRenderTarget = dxDrawRectangle; local _tocolor = tocolor; local function dxDrawRectangle( fPosX, fPosY, fWidth, fHeight, vColor, bPostDraw, bRound, fRadius, fBorderSoft ) if ( not bRound ) then _dxRenderTarget( fPosX, fPosY, fWidth, fHeight, vColor, bPostDraw ); else if ( type ( vColor ) == "table" ) then dxSetShaderValue( g_pShader, "radius", fRadius ); dxSetShaderValue( g_pShader, "borderSoft", fBorderSoft ); dxSetShaderValue( g_pShader, "color", vColor ); dxDrawImage( fPosX, fPosY, fWidth, fHeight, g_pShader, 0, 0, 0, -1, bPostDraw ); end end end local function tocolor( iRed, iGreen, iBlue, iAlpha, bToShader ) if ( not bToShader ) then return _tocolor( iRed, iGreen, iBlue, iAlpha ); else return { iRed / 255, iGreen / 255, iBlue / 255, iAlpha / 255 }; end end; local RED = tocolor( 255, 0, 0, 255, true ); addEventHandler( "onClientRender", root, function ( ) dxDrawRectangle( 600, 600, 256, 256, RED, false, true, 0.2, 0.01 ); end ); I took the shader code from DGS and compiled it (for review, I hope thisdp won't mind). You don't have to drag around a huge number of files if you only need to draw the antialiased corners in dxDrawRectangle. Which you yourself can grab into the RenderTarget. Thanks but it's solved. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now