begin process at 2012 05 29 03:06:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

DirectX

 > 

DirectX10 : Textures


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DirectX10 : Textures

mardi 18 janvier 2011 à 06:33:51 | DirectX10 : Textures

GameSeed

Bonjour à tous.
Je suis actuellement en train de travailler sur mon premier moteur de jeu, pour le moment,
j'essaye simplement de créer un petit jeu 2D.

Je rencontre quelque petites difficultés en ce qui concerne le chargement et l'affichage des textures (pas de shaders, pas de truc très compliqués pour le moment).
J'ai une structure TEXTURE2D me permettant de facilement manipuler les textures :

Code C/C++ :
/*Texture2D.h*/
struct TEXTURE2D {
ID3D10Texture2D* texture;
D3D10_TEXTURE2D_DESC descrition;
};


Une structure c'est cool, mais il nous faut aussi quelques fonctions pour l'utiliser :

Code C/C++ :
/*Dans Direct3D.h*/
void LoadTexture2DFromFile(TEXTURE2D* texture, LPSTR file) {
	ID3D10Texture2D* texture2D;
	ID3D10Resource* resource;
	D3D10_TEXTURE2D_DESC texDesc;
	D3DX10CreateTextureFromFile(dev,
								file,
								NULL,
								NULL,
								&resource,
								NULL);
	resource->QueryInterface(__uuidof(ID3D10Texture2D), (LPVOID*)&texture2D);
	resource->Release();
	texture->texture = texture2D;
	texture2D->GetDesc(&texture->descrition);
}

void DrawTexture2D(TEXTURE2D* texture2D, int x, int y, int boxX, int boxY, int boxWidth, int boxHeight) {
	D3D10_BOX box;
	if ((!boxX) &&(!boxY) && (!boxWidth) && (!boxHeight)) {
		box.left = 0;
		box.top = 0;
		box.right = texture2D->descrition.Width;
		box.bottom = texture2D->descrition.Height;
		box.back = 1;
		box.front = 0;
	} else {
		box.left = boxX;
		box.top = boxY;
		box.right = boxX+boxWidth;
		box.bottom = boxY+boxHeight;
		box.back = 1;
		box.front = 0;
	}
	ID3D10Texture2D* pBackBuffer;
	swapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer);
	dev->CopySubresourceRegion(pBackBuffer, 0, x, y, 0, texture2D->texture, 0, &box);
	pBackBuffer->Release();
}


Et bien sur les autres fonctions importantes pour initialiser directX (dans le même fichier que le code ci dessus) :

Code C/C++ :
#include "Global.h"

IDXGISwapChain *swapChain;
ID3D10Device *dev;
ID3D10RenderTargetView *backBuffer;
ID3DX10Sprite *d3dSprite;

ID3D10Device* getDev() {
	return dev;
}

IDXGISwapChain* getSC() {
	return swapChain;
}

void InitD3D(GAMEWINDOW &gw) {
	DXGI_SWAP_CHAIN_DESC scd;
	ZeroMemory(&scd, sizeof(DXGI_SWAP_CHAIN_DESC));
	scd.BufferCount = 1;
	scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
	scd.BufferDesc.Width = gw.width;
	scd.BufferDesc.Height = gw.height;
    scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
	scd.OutputWindow = gw.hWnd;
	scd.SampleDesc.Count = 4;
	scd.Windowed = TRUE;
	scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
	scd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
	D3D10CreateDeviceAndSwapChain(NULL,
								  D3D10_DRIVER_TYPE_HARDWARE,
								  NULL,
								  0,
								  D3D10_SDK_VERSION,
								  &scd,
								  &swapChain,
								  &dev);
	ID3D10Texture2D *pBackBuffer;
	swapChain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*)&pBackBuffer);
	dev->CreateRenderTargetView(pBackBuffer, NULL, &backBuffer);
	pBackBuffer->Release();
	dev->OMSetRenderTargets(1, &backBuffer, NULL);
	D3D10_VIEWPORT viewPort;
	ZeroMemory(&viewPort, sizeof(D3D10_VIEWPORT));
	viewPort.Width = gw.width;
	viewPort.Height = gw.height;
	viewPort.MinDepth = 0.0f;
	viewPort.MaxDepth = 1.0f;
	viewPort.TopLeftX = 0;
	viewPort.TopLeftY = 0;
	dev->RSSetViewports(1, &viewPort);
	/*D3DXMATRIX viewProjection;                           ***SPRITE USAGE***
	D3DXMatrixOrthoOffCenterLH(&viewProjection,
							  (float)viewPort.TopLeftX,
							  (float)viewPort.Width,
							  (float)viewPort.TopLeftY, 
							  (float)viewPort.Height,
							  0.1f,
							  10.0f);
	D3DX10CreateSprite(dev, 1, &d3dSprite);
	d3dSprite->SetViewTransform(&viewProjection);*/
}

void CloseD3D() {
	swapChain->SetFullscreenState(FALSE, NULL);
	swapChain->Release();
	dev->Release();
	backBuffer->Release();
}

void startRender() {
	dev->ClearRenderTargetView(backBuffer, D3DXCOLOR(0.0f, 0.2f, 0.5f, 1.0f));
	//d3dSprite->Begin(D3DX10_SPRITE_SORT_TEXTURE);
}

void endRender() {
	//d3dSprite->End();
	swapChain->Present(0, 0);
}


Les autres variables non déclarées ici se trouvent dans d'autres fichiers inclus dans global.h.
Bref voila le probleme : j'utilise tout ce petit monde de la manière suivante :

Code C/C++ :
#include "Global.h"

void MainLoop() {
	TEXTURE2D texture;
	LoadTexture2DFromFile(&texture, "sprite-sample.png");
	while (HandleMessages()) {
		D3D10_BOX box;
		startRender();
		DrawTexture2D(&texture, 0, 0, 0, 0, 0, 0);
		endRender();
	}
}


la fenêtre s'ouvre normalement, l'image est rafraichie normalement, seulement, je constate avec stupeur que la fenêtre de présente que la couleur avec laquelle elle est rafraichie... c'est à dire qu'elle est VIDE ! :(



j'ai essayé de placer le dev->CopySubresourceRegion un peut partout dans le code voir si je pouvais déceler l'erreur mais rien ! le programme tourne mais ne me présente aucune texture.
bref, je me demande si ca ne viens pas de l'initialisation car en déboguant le programme je vois bien que le texture2D->descrition est valide ! ou alors je charge mal l'image...
Bref si vous pouvez me guider dans mon probleme je vous serais très reconnaissant !
Si vous avez besoin de plus d'informations, n'hésitez pas a me les demander.
En vous remerciant d'avance...
mardi 18 janvier 2011 à 20:30:48 | Re : DirectX10 : Textures

GameSeed

Quelqu'un à lu mon mon message au moins ? :D
dimanche 13 février 2011 à 17:44:43 | Re : DirectX10 : Textures

korsakoff69


bonjour

on n'utilise pas CopySubresourceRegion() pour afficher dans le backbuffer
mais pour copier d'une ressource dans une autre

si tu veux afficher tes textures, créé un ID3DX10Sprite qui te permettra d'afficher tes textures 2D sans shader

/*
void CopySubresourceRegion(
[in] ID3D10Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D10Resource *pSrcResource,
[in] UINT SrcSubresource,
[in] const D3D10_BOX *pSrcBox
);
*/


Cette discussion est classée dans : box, dev, viewport, texture2d, scd


Répondre à ce message

Sujets en rapport avec ce message

Comment faire un dessin dans DIALOGUE BOX API [ par LouisJean ] bonjour a tous je debut  en programation.  j'ai fait un peut  en JAVA et maintenan DEV C++ Comment faire un dessin dans un control d'un DIALOGUE BOX   Ouvrir un .raw dans une picture box ? [ par benlustr ] Bonjour à tous, je cherche à ouvrir un fichier .raw (image qui n'a pas d'entete) dans une picture box (ou autre chose d'ailleurs, peu importe du momen DEV-C++ ASM ? dev asm [ par maladedede ] Bonjour, je voudrais savoir comment indégrer un code asm dans dev-c++ parceque _asm n'est pas reconnu.Alors je voudrais savoir comment avertir au comp ressources sous Dev C++ [ par moumouteb ] Bonjour, Est-il possible de trouver un éditeur de ressources (comme sous Visual C++) mais sous Dev C++ ou faut-il tout faire dynamiquement? Et sinon e Dev c++ et les bases de données [ par jbmartinez ] Je proramme sur Dev c++. Je suis débutant en C++ et viens du monde du web.J'ai l'abitude de travailler autant avec PHP/Apache/MySql que avec ASP/IIS/A Dev-C++ et LibXml [ par cedricnguessi ] Bonjour,J'essaye d'utiliser libXml2 pour parser un doc XML mais Dev-C++ me retourne toujours une erreur !!! Même si j'utilise le code donné en exemple Problème avec #include <windows.h> [ par ssmint ] Bonjour, je travail sous dev-cpp et je programme en ce moment une application ms-dos.J'utilise dans mon programme des fonctions comme ShellExecute(), ressources sur dev c++5 [ par xbabilone ] Salut a tous .Cmment faire our ajouter une ressource sur dev c++ 5Merci d'avance Dev c++ vs borland c++ [ par AR_Mateys ] Bonjour, j'aimerais voir un exemple de menu très simple en C qui peut remplacer celui qu'on pouvait faire avec Borland. Voici un exemplechar menu(void modifs dans edit box et retour chariot [ par THEwarrior333 ] Bonjour,j'ai deux petits soucis avec mon edit box :- à l'initialisation, son contenu est chargé à partir d'un fichier texte, puis l'utilisateur peut m


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales