зеркало из https://github.com/AvaloniaUI/angle.git
25 строки
1.1 KiB
Markdown
25 строки
1.1 KiB
Markdown
# About
|
|
|
|
Because ANGLE can only generate full HLSL programs after we known the signatures
|
|
between the vertex and pixel stages, we can not immediately call the D3D
|
|
compiler at GL shader compile time. Moreover, we can insert additional
|
|
optimization code right at draw-time.
|
|
|
|
ESSL 1.00 shaders treat all vertex inputs as floating point. We insert a
|
|
conversion routine to transform un-normalized integer vertex attributes in the
|
|
shader preamble to floating point, saving CPU conversion time.
|
|
|
|
At draw-time, we also optimize out any unused render target outputs. This
|
|
improved draw call performance significantly on lower spec and integrated
|
|
devices. Changing render target setups may trigger a shader recompile at draw
|
|
time.
|
|
|
|
# Addendum
|
|
|
|
ANGLE is not the only program to do this kind of draw-time optimization. A
|
|
common complaint from application developers is that draw calls sometimes
|
|
perform very slowly due to dynamic shader re-compilation. A future design
|
|
direction for ANGLE, when targeting a more modern API, is to perform the vertex
|
|
conversion in a separate shader pass, which would then be linked with another
|
|
compiled shader.
|