Yeah, it's being tough, mostly because I'm endlessly browsing through the documentation to find out what I need. Very time-consuming, unproductive, and tedious.
Got signal, at last!
I was having multiple issues at once.
The StateBlock -- If you make use of an ID3D10StateBlock interface (which I do), you may or may not have to release it before calling IDXGISwapChain::ResizeBuffers(). The need to release a live stateblock arises depending on what the stateblock had captured. For example a stateblock may capture the Backbuffer, which is one of the 2 interfaces that have to be released before calling IDXGISwapChain::ResizeBuffers() -- else the call fails with DXGI_ERROR_INVALID_CALL.
My idea is that it's best to release all stateblocks regardless of what they captured. They are easily recreated.
Then we have the ID3D10StateBlock::ReleaseAllDeviceObjects() method which I don't get the purpose of. The docs say it releases all references to the device object. Why, can't I use ID3D10Device::Release() on my device pointers for that? Or does it mean all device objects that were captured (shaders, views, buffers, and whatnot). Even so: why the need for this method? Shouldn't the stateblock interface autonomously release everything it got when I use ID3D10StateBlock::Release()? This documentation is foggy at best... microsoft qwalitee as always.
The Vertex Shader -- I was thunderstruck by the idea that maybe, just maybe, d3d10 had banished the concept of pre-transformed vertices. So I changed the VS code: no longer a pass-through, but an inverse of the viewport-transform to map screen-space coordinates back into units . Well, what do you know, my quads are on screen! I believe a WTF fits wholly here.
If you ask me, it's a waste of GPU cycles, few as they may be... I mean: having to transform things back, only to have them re-transformed back again further down the pipe. But since that's how it works...
I have one issue unresolved:
My quads are being fully opaque. It's wrong. The texture on the quads has an alpha channel, but it's being ignored.
If this was d3d9, I'd use the following renderstates:
pDevice->SetRenderState (D3DRS_ALPHABLENDENABLE, TRUE);
pDevice->SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pDevice->SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
pDevice->SetRenderState (D3DRS_BLENDOP, D3DBLENDOP_ADD);
How do I translate the above for d3d10?
This doesn't seem to be doing it:
::ZeroMemory (&BlendStateDesc, sizeof (D3D10_BLEND_DESC));
BlendStateDesc.AlphaToCoverageEnable = FALSE;
BlendStateDesc.BlendEnable  = TRUE;
BlendStateDesc.SrcBlend = D3D10_BLEND_ONE; //SRC_COLOR;
BlendStateDesc.DestBlend = D3D10_BLEND_ZERO; //INV_SRC_COLOR;
BlendStateDesc.BlendOp = D3D10_BLEND_OP_ADD;
BlendStateDesc.SrcBlendAlpha = D3D10_BLEND_SRC_ALPHA;
BlendStateDesc.DestBlendAlpha = D3D10_BLEND_INV_SRC_ALPHA;
BlendStateDesc.BlendOpAlpha = D3D10_BLEND_OP_ADD;
BlendStateDesc.RenderTargetWriteMask  = D3D10_COLOR_WRITE_ENABLE_ALL;