Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.11.2014, 18:11

D3D11 UpdateSubresource Fehler

EDIT: Es scheint sich erledigt zu haben, habe den Code angepasst und die Änderungen hier eingefügt, aber abgesehen davon, dass es noch nicht abgestürzt ist, kann ich nicht sehen, ob es geht... Also bitte noch nicht den Thread schließen oder so...

Edit2: Es stürzt tatsächlich nicht ab und ich sehe etwas (leider nicht das Richtige), aber ob das richtig ist, was ich da mache, weiß ich nicht...

Hi,

an meinem Code ist irgendetwas falsch, aber ich weiß nicht, was. Ich weiß nur, dass der folgende Code schuld ist, dass sich das Device aufhängt und das Bild schwarz wird. Also wenn ich das UpdateSubresource auskommentiere, wird das Bild nicht schwarz.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
D3D11_BOX TDestBox;
TDestBox.left = 0;
TDestBox.right = Chunk->IsHorizontal ? CHUNK_HORIZONTAL_VOXEL_COUNT : CHUNK_VERTICAL_VOXEL_COUNT;
TDestBox.top = 0;
TDestBox.bottom = Chunk->InstanceCount;
TDestBox.front = 0;
TDestBox.back = 1;

DeviceContext->UpdateSubresource(Chunk->Buffer->Texture, 0, &TDestBox, Chunk->IsHorizontal ? (void*)&(Chunk->ChunkH->Chunks[0]) : (void*)&(Chunk->ChunkV->Chunks[0]), sizeof(TextureDataType)*TDestBox.right,0);


Chunk->IsHorizontal ist immer true. Chunk->InstanceCount entspricht immer der Anzahl der Elemente im Vector Chunk->ChunkH->Chunks. Der Vector wird auch nach dem Aufruf der obigen Funktion nicht mehr verändert.

Hier die Structs:

C-/C++-Quelltext

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
struct BufferType{
    ID3D11Buffer* InstanceBuffer;
    ID3D11Texture2D* Texture;
    ID3D11ShaderResourceView* TextureView;
};

struct TextureDataType{
    unsigned char Offset; //bits: 00XXYYZZ
    unsigned char BlockID;
    unsigned char MarchingCubesIndex;
    unsigned char UnUsed;
};

struct ChunkHorizontal{
    TextureDataType TextureData[CHUNK_HORIZONTAL_VOXEL_COUNT]; 
};

struct ChunkHorizontalContainerType{
    InstanceType Instances[2048];
    std::vector<ChunkHorizontal> Chunks;
};

struct ChunkContainerType{
    int PosX, PosY, PosZ; //in meters
    int Size; //in meters
    ChunkHorizontalContainerType* ChunkH;
    ChunkVerticalContainerType* ChunkV;

    BufferType* Buffer;

    btIndexedMesh** Mesh; //pointer to pointer to mesh created by another class, 0 if no mesh exists for this chunk

    ChunkContainerType* SmallerChunks[2][2][2];

    unsigned short InstanceCount;
    bool IsHorizontal;

};


Und hier wird die Textur erstellt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DXGI_SAMPLE_DESC SampleDesc;
SampleDesc.Count = 1;
SampleDesc.Quality = 0;

D3D11_TEXTURE2D_DESC TDesc;
TDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
TDesc.CPUAccessFlags = 0;
TDesc.Format = DXGI_FORMAT_R8G8B8A8_UINT;
TDesc.Width = (IsHorizontal) ? CHUNK_HORIZONTAL_VOXEL_COUNT : CHUNK_VERTICAL_VOXEL_COUNT;
TDesc.Height = 2048;
TDesc.MipLevels = 1;
TDesc.MiscFlags = 0;
TDesc.Usage = D3D11_USAGE_DEFAULT;
TDesc.ArraySize = 1;
TDesc.SampleDesc = SampleDesc;

result=Device->CreateTexture2D(&TDesc, 0, &((*Buffer)->Texture));


Ich will die Textur praktisch nur als Voxel-Textur benutzen, aus der der Geometrie-Shader dann die entsprechenden Daten lädt. Also brauche ich vor allem keine Mipmaps und solches Zeug. Aber ich habe Texturen noch nie auf diese Weise benutzt und bestimmt irgendetwas falsch gemacht.

Hat jemand eine Idee, wo der Fehler liegen könnte? Ich bin mir fast sicher, dass die DestBox falsch ist...

Grüße,
Magogan
Cube Universe
Entdecke fremde Welten auf deiner epischen Reise durchs Universum.

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Magogan« (09.11.2014, 20:09)