[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