• Advertisement
Sign in to follow this  

3D wrapper of ClearRenderTargetView (DirectX 10)

Recommended Posts

hi everyone :

i want the equivalent and the correct vb.NET code for the following interface memeber :

 virtual void STDMETHODCALLTYPE ClearRenderTargetView( 
            /* [annotation] */ 
            __in  ID3D10RenderTargetView *pRenderTargetView,
            /* [annotation] */ 
            __in  const FLOAT ColorRGBA[ 4 ]) = 0;

REMARKS:

FLOAT is float;

this declaration is from MSDN :

void ClearRenderTargetView(
  [in]       ID3D10RenderTargetView *pRenderTargetView,
  [inconst FLOAT                  ColorRGBA[4]
);

____________________________________________________________________________________________________________

 

Edited by abdellah

Share this post


Link to post
Share on other sites
Advertisement

Are you using some sort of DX10 wrapper?

edit - slimdx seems to be a dx wrapper for .net technologies.  Also IIRC there's also sharpdx

Edited by Infinisearch

Share this post


Link to post
Share on other sites

notes :

if i use those declarations i got AccessViolationException error :

Sub ClearRenderTargetView(ByVal pRenderTargetView As ID3D10RenderTargetView,
                                ByVal ColorRGBA() As Single)

or :

Sub ClearRenderTargetView(ByVal pRenderTargetView As ID3D10RenderTargetView,
                                ByRef ColorRGBA() As Single)

or :

Sub ClearRenderTargetView(ByVal pRenderTargetView As ID3D10RenderTargetView,
                                ByVal ColorRGBA As Single)

or :

Sub ClearRenderTargetView(ByVal pRenderTargetView As ID3D10RenderTargetView,
                                ByRef ColorRGBA As Single)

but if i use the following synthax i gives me nothing (there is no return value) :

Sub ClearRenderTargetView(ByVal pRenderTargetView As ID3D10RenderTargetView,
                                ByVal ColorRGBA As D3DXVECTOR4)

with :

<StructLayout(LayoutKind.Sequential, Size:=4)>
    Public Structure D3DXVECTOR4
        Dim x, y, z, w As Single
        Public Sub New(ByVal xp As Single, ByVal yp As Single, ByVal zp As Single, ByVal wp As Single)
            x = xp
            y = yp
            z = zp
            w = wp


        End Sub
    End Structure

but the result is :

 

a.PNG

Edited by abdellah

Share this post


Link to post
Share on other sites

I've never implemented a wrapper for an api before so I can't help you since you say you implemented your own.  But if I were to guess, I'd think that if clearrendertarget has a problem there are other calls that don't work as well... maybe if you track those down you can narrow down where you went wrong with your wrapper.  Another alternative might be to look at the source for slimdx or sharpdx since they are opensource.  Maybe seeing there implementation can help you with yours.

Also I'd like to say DX10 is a dead API, DX11 is DX10 done right.  In addition IIRC DX10 and DX11 are extremely similar.  So if you move to DX11 you can use slimdx or sharpdx directly which will make your life much easier.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Advertisement
  • Advertisement
  • Popular Tags

  • Advertisement
  • Popular Now

  • Similar Content

    • By regnar
      Hi!
      I've been trying to implement simple virtual globe rendering system using "3D Engine Design for Virtual Globes" book as a reference.  What I do is I use 6 planes to form a cube, send it to GPU and use vertex shader to form a sphere and add random noise to simulate surface of the planet. The problem is how do I do CPU work on the vertex data from now on - how do I get world space coordinates of a terrain patch to perform LOD techniques, how do I do camera-terrain collision detection etc. ?
    • By KarimIO
      Hey guys,
      Are lightmaps still the best way to handle static diffuse irradiance, or is SH used for both diffuse and specular irradiance now?
      Also, do any modern games use direct light in lightmaps, or are all direct lighting handled by shadow maps now?
      Finally, how is SH usually baked?
      Thanks!
    • By KarimIO
      Hey guys
      So I was wondering how modern terrain and water geometry works both with and without tesselation. Essentially:
      1) Is Geoclipmapping still the best CPU tesselation technique?
      2) Is Geoclipmapping still used with tesselation?
      3) Is non-tesselated water just flat? Is there any other (reasonable) ways to simulate it? Do people use Geoclipmapping for that too?
      Thanks!
    • By Atwo Studios
       
      Hey guys,

      Anthony here from Atwo Studios bringing you some new updates for the new year!
      In this video I go over our game ROY, the new games and some general updates to the company!

      If you have not checked out ROY feel free to give it a try! Many people have said they enjoyed the game thus far!
      ROY: https://goo.gl/o6JJ5P
       
    • By evelyn4you
      hi,
      until now i use typical vertexshader approach for skinning with a Constantbuffer containing the transform matrix for the bones and an the vertexbuffer containing bone index and bone weight.
      Now i have implemented realtime environment  probe cubemaping so i have to render my scene from many point of views and the time for skinning takes too long because it is recalculated for every side of the cubemap.
      For Info i am working on Win7 an therefore use one Shadermodel 5.0 not 5.x that have more options, or is there a way to use 5.x in Win 7
      My Graphic Card is Directx 12 compatible NVidia GTX 960
      the member turanszkij has posted a good for me understandable compute shader. ( for Info: in his engine he uses an optimized version of it )
      https://turanszkij.wordpress.com/2017/09/09/skinning-in-compute-shader/
      Now my questions
       is it possible to feed the compute shader with my orignial vertexbuffer or do i have to copy it in several ByteAdressBuffers as implemented in the following code ?
        the same question is about the constant buffer of the matrixes
       my more urgent question is how do i feed my normal pipeline with the result of the compute Shader which are 2 RWByteAddressBuffers that contain position an normal
      for example i could use 2 vertexbuffer bindings
      1 containing only the uv coordinates
      2.containing position and normal
      How do i copy from the RWByteAddressBuffers to the vertexbuffer ?
       
      (Code from turanszkij )
      Here is my shader implementation for skinning a mesh in a compute shader:
      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 struct Bone { float4x4 pose; }; StructuredBuffer<Bone> boneBuffer;   ByteAddressBuffer vertexBuffer_POS; // T-Pose pos ByteAddressBuffer vertexBuffer_NOR; // T-Pose normal ByteAddressBuffer vertexBuffer_WEI; // bone weights ByteAddressBuffer vertexBuffer_BON; // bone indices   RWByteAddressBuffer streamoutBuffer_POS; // skinned pos RWByteAddressBuffer streamoutBuffer_NOR; // skinned normal RWByteAddressBuffer streamoutBuffer_PRE; // previous frame skinned pos   inline void Skinning(inout float4 pos, inout float4 nor, in float4 inBon, in float4 inWei) {  float4 p = 0, pp = 0;  float3 n = 0;  float4x4 m;  float3x3 m3;  float weisum = 0;   // force loop to reduce register pressure  // though this way we can not interleave TEX - ALU operations  [loop]  for (uint i = 0; ((i &lt; 4) &amp;&amp; (weisum&lt;1.0f)); ++i)  {  m = boneBuffer[(uint)inBon].pose;  m3 = (float3x3)m;   p += mul(float4(pos.xyz, 1), m)*inWei;  n += mul(nor.xyz, m3)*inWei;   weisum += inWei;  }   bool w = any(inWei);  pos.xyz = w ? p.xyz : pos.xyz;  nor.xyz = w ? n : nor.xyz; }   [numthreads(1024, 1, 1)] void main( uint3 DTid : SV_DispatchThreadID ) {  const uint fetchAddress = DTid.x * 16; // stride is 16 bytes for each vertex buffer now...   uint4 pos_u = vertexBuffer_POS.Load4(fetchAddress);  uint4 nor_u = vertexBuffer_NOR.Load4(fetchAddress);  uint4 wei_u = vertexBuffer_WEI.Load4(fetchAddress);  uint4 bon_u = vertexBuffer_BON.Load4(fetchAddress);   float4 pos = asfloat(pos_u);  float4 nor = asfloat(nor_u);  float4 wei = asfloat(wei_u);  float4 bon = asfloat(bon_u);   Skinning(pos, nor, bon, wei);   pos_u = asuint(pos);  nor_u = asuint(nor);   // copy prev frame current pos to current frame prev pos streamoutBuffer_PRE.Store4(fetchAddress, streamoutBuffer_POS.Load4(fetchAddress)); // write out skinned props:  streamoutBuffer_POS.Store4(fetchAddress, pos_u);  streamoutBuffer_NOR.Store4(fetchAddress, nor_u); }  
  • Advertisement