初学DX,比较弱,希望大牛们给些指点。 ^_^
    我简单些说,基本上我希望实现的一个技术过程是在程序中手动创建纹理并手动赋值,然后将纹理传入GPU中,在像素着色器上进行采样,然后依据手动写入的颜色值绘制颜色。
    在窗口部分我是使用了2个三角形构成一个覆盖全绘图区域的四边形,然后在像素着色器中对传入的纹理进行采样,纹理大小与绘图区域的大小是同样的。
    理论上,我希望得到如下的绘制效果。
    
    可是实际上得到了如下的效果。
        不知道实际上图片下面那部分颜色数据为何不对,我把核心部分的测试代码贴出来,大家帮我看看吧。//首先是设置数据,这里主要就是创建纹理,手动写颜色,现在期望是全部固定写了蓝色,
//然后建立2个三角形可以拼成一个覆盖整个屏幕的四边形
//最后是将创建的纹理设置进GPU中。
bool Setup()
{
    //创建纹理
    if (FAILED(Device->CreateTexture(200, 200, 1, D3DUSAGE_DYNAMIC, D3DFMT_A32B32G32R32F, D3DPOOL_DEFAULT, &Texture, NULL)))
    {
        return false;
    }
    D3DLOCKED_RECT rect;
    //加锁
    if(FAILED(Texture->LockRect(0, &rect, NULL, NULL)))
    {
        return false;
    }
    //写数据进纹理
    D3DXVECTOR4 *pData = (D3DXVECTOR4*)rect.pBits;
    for (unsigned int x = 0; x < 40000; x++)
    {
        pData[x] = D3DXVECTOR4(0, 0, 1.0f, 1.0f);
    }
    //解锁
    if (FAILED(Texture->UnlockRect(0)))
    {
        return false;
    }    //用4个顶点创建3个三角形,将整个绘图区域覆盖
    CUSTEMVERTEX vertices[] =
    {
        { 0.0f, 0.0f, 0.3f, 1.0f, 0xffff0000, 0, 0},
        { 200.0f, 0.0f, 0.3f, 1.0f, 0xffff0000, 1, 0},
        { 0.0f, 200.0f, 0.3f, 1.0f, 0xffff0000, 0, 1},
        { 200.0f, 200.0f, 0.3f, 1.0f, 0xffff0000, 1, 1},
    };
    if(FAILED(Device->CreateVertexBuffer(4 * sizeof(CUSTEMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &Vertex, NULL)))
    {
        return false;
    }
    VOID* pVertices;
    if(FAILED(Vertex->Lock(0, sizeof(vertices), (void**)&pVertices, 0)))
    {
        return false;
    }
    memcpy(pVertices, vertices, sizeof(vertices));
    Vertex->Unlock();    //HLSL
    DWORD dwShaderFlags = D3DXFX_NOT_CLONEABLE | D3DXSHADER_DEBUG;
    ID3DXBuffer *poError = NULL;
    if(FAILED( D3DXCreateEffectFromFile( Device, _T("TestShader.fx"), NULL, NULL, dwShaderFlags, NULL, &Effect, &poError)))
    {
        const char *pError = (const char *)poError->GetBufferPointer();
        return false;
    }    //将纹理设置到GPU中,供像素着色器采样。
    if(FAILED(Effect->SetTexture("g_Tex", Texture)))
    {
        return false;
    }
    return true;
}
//这里就是单纯地在Shader中画像素了
bool Render(float timeDelta)
{
    if(Device)
    {
        Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0x00000000, 1.0f, 0);
        Device->BeginScene();
        Device->SetStreamSource(0, Vertex, 0, sizeof(CUSTEMVERTEX));
        Device->SetFVF(D3DFVF_CUSTOMVERTEX);        //选择指定的Technique
        Effect->SetTechnique("RenderTest");
        unsigned int uPass;
        if (SUCCEEDED(Effect->Begin(&uPass, 0)))
        {
            for (unsigned int uP = 0; uP < uPass; uP++)
            {
                Effect->BeginPass(uP);
                //单纯地画2个三角形,构成一个覆盖绘图区域的矩形
                Device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
                Effect->EndPass();
            }
            Effect->End();
        }
        Device->EndScene();
        Device->Present(0, 0, 0, 0);
    }
    return true;
}
//下面是Shader代码
texture g_Tex;    //纹理
sampler2D g_samTex = sampler_state{
    Texture = <g_Tex>;
    MinFilter = Point;
    MagFilter = Linear;
    MipFilter = Linear;
};//顶点着色的输入输出结构
struct RenderTest_Vert_Input
{
    float2 Tex      : TEXCOORD0;
    float4 Color    : COLOR;
    float4 Position : POSITION;
};
struct RenderTest_Vert_Output
{
    float4 Position : POSITION;
    float4 Color    : COLOR;
    float2 Tex      : TEXCOORD0;
};
//顶点着色函数
RenderTest_Vert_Output RenderTest_Vert(RenderTest_Vert_Input Input)
{
    RenderTest_Vert_Output Output;
    Output.Position = Input.Position;
    Output.Tex = Input.Tex;
    Output.Color = Input.Color;
    return Output;
}
//像素着色的输入输出结构
struct RenderTest_Pix_Input
{
    float4 Color : COLOR;
    float2 Tex   : TEXCOORD0;
};
struct RenderTest_Pix_Output
{
    float4 Color : COLOR;
};
//像素着色函数
RenderTest_Pix_Output RenderTest_Pix(RenderTest_Pix_Input Input)
{
    RenderTest_Pix_Output Output;
    Output.Color = tex2D(g_samTex, Input.Tex);
    return Output;
}
//供调用的technique
technique RenderTest
{
    pass p0
    {
        VertexShader = compile vs_2_0 RenderTest_Vert();
        PixelShader = compile ps_3_0 RenderTest_Pix();
    }
}