[PATCH] wined3d: Display correctly TEXT comments by printing lines separately
Christian Costa
titan.costa at wanadoo.fr
Mon Mar 1 02:39:44 CST 2010
--
This enables printing for example text below with readability and without truncation nor buffer overflow
// TEXT
""
" vs.1.1"
" // v0 - Vertex Position"
" // v7 - Vertex Texture Data u,v "
" // v8 - Vertex Tangent (v direction)"
" //"
" // c0 - { 0.0, 0.5, 1.0, 2.0}"
" // c1 - { 4.0, .5pi, pi, 2pi} "
" // c2 - {1, -1/3!, 1/5!, -1/7! } //for sin"
" // c3 - {1/2!, -1/4!, 1/6!, -1/8! } //for cos"
" // c4-7 - Composite World-View-Projection Matrix"
" // c8 - ModelSpace Camera Position"
" // c9 - ModelSpace Light Position"
" // c10 - {fixup factor for taylor series imprecision, }"
" // c11 - {waveHeight0, waveHeight1, waveHeight2, waveHeight3} "
" // c12 - {waveOffset0, waveOffset1, waveOffset2, waveOffset3} "
" // c13 - {waveSpeed0, waveSpeed1, waveSpeed2, waveSpeed3} "
" // c14 - {waveDirX0, waveDirX1, waveDirX2, waveDirX3} "
" // c15 - {waveDirY0, waveDirY1, waveDirY2, waveDirY3} "
" // c16 - { time, sin(time)}"
" // c17 - {basetexcoord distortion x0, y0, x1, y1}"
""
""
" // m4x4 oPos, v0, c4"
" mul r0, c14, v7.x // use tex coords as inputs to sinusoidal warp "
" mad r0, c15, v7.y, r0 // use tex coords as inputs to sinusoidal warp "
" "
" mov r1, c16.x //time..."
" mad r0, r1, c13, r0 // add scaled time to move bumps according to frequency"
" add r0, r0, c12"
" frc r0.xy, r0 // take frac of all 4 components"
" frc r1.xy, r0.zwzw //"
" mov r0.zw, r1.xyxy //"
" "
" mul r0, r0, c10.x // multiply by fixup factor (due to inaccuracy of taylor series)"
" sub r0, r0, c0.y // subtract .5"
" mul r0, r0, c1.w // mult tex coords by 2pi coords range from(-pi to pi)"
" "
" mul r5, r0, r0 // (wave vec)^2"
" mul r1, r5, r0 // (wave vec)^3 "
" mul r6, r1, r0 // (wave vec)^4 "
" mul r2, r6, r0 // (wave vec)^5"
" mul r7, r2, r0 // (wave vec)^6"
" mul r3, r7, r0 // (wave vec)^7 "
" mul r8, r3, r0 // (wave vec)^8"
" "
" mad r4, r1, c2.y, r0 //(wave vec) - ((wave vec)^3)/3! "
" mad r4, r2, c2.z, r4 // + ((wave vec)^5)/5! "
" mad r4, r3, c2.w, r4 // - ((wave vec)^7)/7! "
" "
" mov r0, c0.z //1"
" mad r5, r5, c3.x ,r0 //-(wave vec)^2/2!"
" mad r5, r6, c3.y, r5 //+(wave vec)^4/4!"
" mad r5, r7, c3.z, r5 //-(wave vec)^6/6!"
" mad r5, r8, c3.w, r5 //+(wave vec)^8/8!"
" "
" // sub r0, c0.z, v5.x //... 1-wave scale"
" // mul r4, r4, r0 // scale sin "
" // mul r5, r5, r0 // scale cos"
""
" dp4 r8, r4, c11 //multiply wave heights by waves"
" "
""
" mul r0.xyz, c0.xxzx, r8 //multiply wave magnitude at this vertex by normal "
" add r0.xyz, r0, v0 //add to position"
" mov r0.w, c0.z //homogenous component"
" "
" m4x4 oPos, r0, c4 // OutPos = ObjSpacePos * Composite World-View-Projection Matrix"
" mul r1, r5, c11 //cos* waveheight"
" dp4 r9.x, -r1, c14 //normal x offset"
" dp4 r9.yzw, -r1, c15 //normal y offset and tangent offset"
" mov r5, c0.xxzx"
" mad r5.xy, r9, c10.y, r5 //warped normal move nx, ny according to cos*wavedir*waveeheight"
" mov r4, v9"
" mad r4.z, -r9.x, c10.y, r4.z //warped tangent vector "
" dp3 r10.x, r5, r5"
" rsq r10.y, r10.x"
" mul r5, r5, r10.y //normalize normal"
" "
" "
" dp3 r10.x, r4, r4"
" rsq r10.y, r10.x"
" mul r4, r4, r10.y //normalize tangent"
" mul r3, r4.yzxw, r5.zxyw"
" mad r3, r4.zxyw, -r5.yzxw, r3 //xprod to find binormal"
" sub r1, c9, r0 //light vector"
" sub r2, c8, r0 //view vector"
" dp3 r10.x, r1, r1 //normalize light vector"
" rsq r10.y, r10.x"
" mul r1, r1, r10.y"
" dp3 r6.x, r1, r3 "
" dp3 r6.y, r1, r4"
" dp3 r6.z, r1, r5 //put light vector in tangent space"
" dp3 r10.x, r2, r2"
" rsq r10.y, r10.x"
" mul r2, r2, r10.y //normalized view vector"
" "
" dp3 r7.x, r2, r3"
" dp3 r7.y, r2, r4"
" dp3 r7.z, r2, r5 //put view vector in tangent space"
" "
""
""
""
" mov r0, c16.x"
" mul r0, r0, c24"
" frc r0.xy, r0"
" mul r1, v7, c26"
""
" add oT0, r1, r0 //bump map coord1"
""
" mov r0, c16.x"
" mul r0, r0, c25"
" frc r0.xy, r0"
" mul r1, v7, c27"
""
" add oT1, r1, r0 //bump map coord 2"
""
" dp4 r0.x, v0, c20"
" dp4 r0.y, v0, c21"
" dp4 r0.zw, v0, c22"
" "
" mov oT2, r0 //projective tex coords for reflection/ refreaction maps"
" mov oT3, r7 //tan space view vec "
"// mul r0, r8, c28.zw"
"// mad oT4, v7, c28.xy, r0 //base map coords "
" mul oT4, v7, c28.xy //base map coords "
""
" mov oT5, r6 //tan space light vec "
""
""
""
---
dlls/wined3d/shader.c | 35 ++++++++++++++++++++++++++++++++++-
1 files changed, 34 insertions(+), 1 deletions(-)
-------------- next part --------------
diff --git a/dlls/wined3d/shader.c b/dlls/wined3d/shader.c
index 06c49ab..c81494a 100644
--- a/dlls/wined3d/shader.c
+++ b/dlls/wined3d/shader.c
@@ -1231,7 +1231,40 @@ static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe
fe->shader_read_comment(&ptr, &comment, &comment_size);
if (comment)
{
- TRACE("// %s\n", debugstr_an(comment, comment_size));
+ if (TRACE_ON(d3d_shader) && (comment_size >= 4) &&
+ (comment[0] == 'T') && (comment[1] == 'E') && (comment[2] == 'X') && (comment[3] == 'T'))
+ {
+ /* Display correctly TEXT comments by printing lines separately */
+ int size = comment_size - 4 + 1;
+ char* str = (char*)HeapAlloc(GetProcessHeap(), 0, size);
+ if (!str)
+ ERR("Cannot allocate memory for displaying comment string\n");
+ else
+ {
+ int i = 0;
+ char* line = str;
+ memcpy(str, comment + 4, size);
+ DPRINTF("// TEXT\n");
+ while (i < size)
+ {
+ /* Find end of line */
+ while ((str[i] != 0) && (str[i] != 0x0a))
+ i++;
+ /* Terminate line and remove preceding 0x0d if any */
+ if (i && (str[i-1] == 0x0d))
+ str[i-1] = 0;
+ else
+ str[i] = 0;
+ /* Display line and prepare next line */
+ DPRINTF("%s\n", debugstr_an(line, strlen(line)));
+ i++;
+ line = str + i;
+ }
+ HeapFree(GetProcessHeap(), 0, str);
+ }
+ }
+ else
+ TRACE("// %s\n", debugstr_an(comment, comment_size));
continue;
}
More information about the wine-patches
mailing list