AussieSpoon

Members
  • Content count

    39
  • Joined

  • Last visited

Community Reputation

184 Neutral

About AussieSpoon

  • Rank
    Member
  1. Hello,   I am trying to set up alpha to coverage in DirectX 11. I am currently rendering a particle system using instancing and a geometry shader, so that I pass in a point (1 vert) to render all the particles of that particle system. This is what it looks like:     I'm trying to set up alpha to coverage but I can't seem to do so. I am getting a problem where it renders a black quad at the particle systems position   Here is the Alpha to coverage blend state: D3D11_BLEND_DESC alphaToCoverageDesc = {0}; alphaToCoverageDesc.AlphaToCoverageEnable = true; alphaToCoverageDesc.IndependentBlendEnable = false; alphaToCoverageDesc.RenderTarget[0].BlendEnable = false; alphaToCoverageDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; result = device->CreateBlendState(&alphaToCoverageDesc, &AlphaToCoverageBS); And this is what it looks like:   Even when I try to imitate it within the pixel shader with dithering it produces a similar error:     So I was wondering if it has anything to do with instancing or the geometry shader? I can't imagine it is but I have no idea. Any one think of any reason for this.  If this is too vague just say Thanks 
  2. Oh god, yeah I forgot about that.   Thanks heaps, it's compiling now 
  3. It says:      "C:\Users\Trav\Desktop\2 Person Platformer\DirectX - Sprites\TestShader.fx(12,17): Unrecognized RHS value in assignment: 'WRAP' C:\Users\Trav\Desktop\2 Person Platformer\DirectX - Sprites\TestShader.fx(12,5): ID3DXEffectCompiler: Unexpected error ID3DXEffectCompiler: There was an error initializing the compiler   So I changed "WRAP" in the shader to "LINEAR" to test it, it gives me the same error as above (including "WRAP" even though that doesn't exist in the shader when I ran it/anymore) 
  4. Yeah, g_pTestShader is a NULL pointer.  I think the problem is my file directory ("TestShader.fx"), but I have the shader file in my root directory and in the cpp files location (just in case). But it still doesn't seem to load the file correctly 
  5. Hello,   I am trying to get a shader to give an effect over sprites I draw. Currently I don't have the shader altering the sprites, I'm just trying to test that it works/compiles.    Here is my TestShader.fx:   // World * View * Projection matrix float4x4 g_mWorldViewProjection : WORLDVIEWPROJECTION; float4x4 g_mWorld : WORLD; texture g_SpriteTexture; //What Sprite('s Texture) to use sampler SpriteSampler = sampler_state { Texture = <g_SpriteTexture>; MipFilter = WRAP; MinFilter = WRAP; MagFilter = WRAP; }; float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR { //return float4(1, 0, 0, 1); Turn every pixel red float4 color = tex2D(SpriteSampler, texCoord); //color.gb = color.r; //make texture GreyScale return color; } technique DefaultTechnique //Renders The current Sprite as is { pass Pass1 { PixelShader = compile ps_2_0 PixelShaderFunction(); } }    Then I create it like so:   //==== Load in our shader: LPD3DXBUFFER pErrors = NULL; wchar_t *str1 = L"TestShader.fx"; DWORD dwShaderFlags = 0; //Create The First Shader if (FAILED(D3DXCreateEffectFromFile( g_pd3dDevice, str1, NULL, NULL, dwShaderFlags, NULL, &g_pTestShader, &pErrors ) )) { if (pErrors != NULL) { char *errorString = (char*)pErrors->GetBufferPointer(); printf(errorString); MessageBox( NULL, L"Could not Create Test Shader", L"Textures1.exe", MB_OK ); //return E_FAIL; } //return E_FAIL; }       Then I try to set it's Matrix, but it crashes my program. I get an error: Unhandled exception at 0x76fc15de in Sprites.exe: 0xC0000005: Access violation reading location 0x00000000.   g_pTestShader->SetMatrix( "g_mWorldViewProjection", &Cam.GetWorldViewProj());   The above line is the only code that tries to use my shader object and it crashes it.   Any ideas why?   Thanks 
  6. Yeah, I know. It still gives me the error though
  7. The LPD3DXLINE->DrawTransform(); function takes D3DVECTOR3 but the ->Draw(); uses a D3DVECTOR2 so I'm confused what to put here? Because I get the "hast to be a constant value" error if I don't
  8. Hello,   I am using the LPD3DXLINE class. I have 2D sprites being rendered and each sprite has a physics object (4 verlets), I am trying to use the LPD3DXLINE class to Draw lines between each physics verlet/vertex.    But when I pass the physics variables (world space) to the Line-> draw(); function it draws the lines in places I don't want (pixel/screen space, I think)   Here is what I mean:     There should be a red line around each sprite, (the bottom left corner is my world's (0,0)  so when it draws (0,0) it does it from the top left (the screens (0,0)).   So I assume this is a matrix problem? So do I need to give the LPD3DXLINE my view*world*porj matrix?   The LPD3DXLINE->DrawTransform(); function takes D3DVECTOR3 but the ->Draw(); uses a D3DVECTOR2 so I'm confused what to put here?   Or is it somehing else I'm doing wrong?    Here is the code for drawing the lines (if it helps):   LPD3DXLINE myLine = NULL; D3DXCreateLine(g_pd3dDevice, &myLine); myLine->SetWidth(1); //myLine->SetGLLines(TRUE); myLine->Begin(); for (int i = 0; i < PhysicsWorld.GetBodyCount(); i++) { int size = PhysicsWorld.Bodies[i]->VertexCount; //int* array=new int[len]; D3DXVECTOR2* Vetecies = new D3DXVECTOR2[size]; for (int j = 0; j < PhysicsWorld.Bodies[i]->VertexCount; j++) { Vetecies[j].x = PhysicsWorld.Bodies[i]->Vertices[j]->Position.x; Vetecies[j].y = PhysicsWorld.Bodies[i]->Vertices[j]->Position.y; } //myLine->DrawTransform(Vetecies, PhysicsWorld.Bodies[i]->VertexCount, , myLine->Draw( Vetecies, PhysicsWorld.Bodies[i]->VertexCount, D3DCOLOR_ARGB( 255, 255, 0, 0 )); delete Vetecies; Vetecies = NULL; } myLine->End(); myLine->Release();     Thanks 
  9. Thanks for the reply.   Is it possible to do this with specific co-ordinates of a texture? (repeat only 1 specific part of it)   I am using this image:     I am trying to repeat only the pink square and cross part, but when I render I get:       The way I am doing it is by generating the uv co-ordinates as normal and then multiplying appropriate vertices u/v by the number of repeats I want (additional sprites)   //Set Vertex 1 (Bottom Left) ? //Other code omitted pVertex[VertexCounter].u1 = pTexture->GetTextureUMin(); pVertex[VertexCounter].v1 = pTexture->GetTextureVMax(); VertexCounter++; //Set vertex 2 (Top Left) pVertex[VertexCounter].u1 = pTexture->GetTextureUMin(); pVertex[VertexCounter].v1 = pTexture->GetTextureVMin() * pSprite->m_TimesRepeatedY; VertexCounter++; //Set vertex 3 (Top Right) pVertex[VertexCounter].u1 = pTexture->GetTextureUMax() * pSprite->m_TimesRepeatedX; pVertex[VertexCounter].v1 = pTexture->GetTextureVMin() * pSprite->m_TimesRepeatedY; VertexCounter++; //Set vertex 4 (Bottom Right) pVertex[VertexCounter].u1 = pTexture->GetTextureUMax() * pSprite->m_TimesRepeatedX; pVertex[VertexCounter].v1 = pTexture->GetTextureVMax(); VertexCounter++;     Is there any obvious problem with this? Or something else?   Thanks
  10. Hello,   I have a program that creates a sprites using quads in a vertex buffer.    I'm wondering if it is possible to instead of creating multiple quads side by side it is possible to make them 1 quad the re-uses the texture drawn and repeat it multiple times?   e.g. Using the image below I'm trying to achieve b) using the Sprite, instead of  doing a), which uses 4 quads instead of 1          How would I achieve this?   If this is hard to explain without my Texture/sprite code, I can post it if it makes it easier.    Thanks
  11.   Oh man, this was my problem. I was returning the texture as an object, but I have a different function for returning it as a pointer. Since the animation take a pointer I needed to return it as a pointer.   Thanks heaps for pointing that out, you are a legend.  It works fine now. 
  12. Class 1 (.h):   struct DrawArea { float left, right, top, bottom; }; class Texture { public: Texture(void); Texture(IDirect3DTexture9 &_Texture); Texture(IDirect3DTexture9 &_Texture, float _startX, float _startY, float _endX, float _endY); ~Texture(void); IDirect3DTexture9* GetDXTexture() {return m_Texture;} DrawArea GetDrawArea() {return m_DrawArea;} //u = x, v = y co-ordinate float GetTextureUMin(); //the x start (left) float GetTextureUMax(); //the x end (right) float GetTextureVMin(); //the y start (top) float GetTextureVMax(); //the y end (bottom) uINT GetWidth(); //will return the width of the texture at level 0 uINT GetWidth(uINT _level); uINT GetHeight(); //will return the width of the texture at level 0 uINT GetHeight(uINT _level); void SetToTexture(Texture &_texture); void SetToTexture(Texture *_texture); void SetDXTexture(IDirect3DTexture9 &_Texture); void SetDXTexture(IDirect3DTexture9 *_Texture); void SetDXTexture(IDirect3DTexture9 &_Texture, float _startX, float _startY, float _endX, float _endY); void SetDXTexture(IDirect3DTexture9 *_Texture, float _startX, float _startY, float _endX, float _endY); void SetDrawArea(float _startX, float _startY, float _endX, float _endY); private: IDirect3DTexture9* m_Texture;//The DirectX texture DrawArea m_DrawArea; };     Class 2 (.h):   class Animation { public: Animation(void); Animation(Texture* _Texture, float StartX, float StartY, short Rows, short Columns, float FrameWidth, float FrameHeight, short Speed); ~Animation(void); void Update(); private: Texture* m_Texture;//????!?!!? float m_StartX; float m_StartY; short m_Rows; short m_Columns; short m_CurrentFrame; short m_CurrentFrameX; short m_CurrentFrameY; float m_FrameWidth; float m_FrameHeight; short m_Time; //short m_Counter (Might be better to make this global (To only have instance of it instead of 1 per animation) };   Class 2 (.cpp):   Animation::Animation(Texture* _Texture, float StartX, float StartY, short Rows, short Columns, float FrameWidth, float FrameHeight, short Speed) { m_Texture = _Texture; m_StartX = StartX; m_StartY = StartY; m_Rows = Rows; m_Columns = Columns; m_FrameWidth = FrameWidth; m_FrameHeight = FrameHeight; m_Time = Speed; m_CurrentFrame = 0, m_CurrentFrameX = 0, m_CurrentFrameY = 0; }   Creating/using the variables:   Animation *TestAnimation; ............ TestAnimation = new Animation(&TestSprite1->GetTexture(), 0, 0, 4, 1, 64, 64, 1); TestSprite1->SetAnimation(TestAnimation);