Войти
ПрограммированиеФорумГрафика

Newbie.DirectX

Страницы: 1 2 3 Следующая »
#0
11:19, 12 дек 2017

Не прошло и три года, как добрался я до классов в С++(и сразу почувствовал насколько это удобно).  В смысле их применение. И всё шло хорошо. Пока я использовал их для загрузки текстур.Ситуация. А решил я в качестве опыта попробовать добавить к классу текстур координаты объекта на который текстура накладываются, и чоб не мучатся сразу сделал цельный вертексный буффер. Шоб его создать и заполнить, даю функции имя девайса и координаты...

+ Показать

Итак, я создаю вертекс буффер в классе

  
//VertexQuad -структура содержащая координаты 6 вертексов. 

LPDIRECT3DVERTEXBUFFER9& textr::initG (LPDIRECT3DDEVICE9 d, VertexQuad* vq)
   {
      VOID *pp;
      d->CreateVertexBuffer( sizeof(VertexQuad), 0, D3DFVF_VERTEXPOINT, D3DPOOL_MANAGED, &vb0, NULL );      
       vb0->Lock( 0, sizeof(VertexQuad), (void**)&pp, 0 )
      memcpy(pp, vq, sizeof(VertexQuad) );
      vb0->Unlock();
      return vb0;
   };

Тот же самый код я использую в теле main и всё работает. Тут работает всё. (То есть буфер создаётся. Координаты и девайс передаются. Memcpy копирует. И никаких ошибок.) Но вертекстный буффер остаётся пустым...А значит я не понимаю чего то либо в классах, либо  в указателях, либо ни в том, ни в другом. Вопрос, господа эксперты, что мне сделать, чтобы этот код стал работать в соответствии с моими ожиданиями.

#1
13:27, 12 дек 2017
memcpy(pp, vq, VertexCount * sizeof(VertexQuad) );
#2
13:39, 12 дек 2017

gamedevfor
пробовал увеличивать размер - нифига(хотя VertexQuad  и так содержит координаты всех Vertex Point, а значит и размер имеет соответствующий).

#3
13:46, 12 дек 2017

восставший из праха
> VertexQuad и так содержит координаты всех Vertex Point

Это не правильно, нужно по раздельности: потому что кроме координат нужно будет передавать еще и текстурные координаты, и другую информацию.

#4
13:51, 12 дек 2017

gamedevfor
он и содержит и координаты, и цвет, и текстурные координаты)

#5
13:55, 12 дек 2017

восставший из праха
Там надо четко соблюдать выравнивание и OFFSET-ы в памяти, а за этим легче следить когда всё по раздельности.

#6
14:02, 12 дек 2017

gamedevfor
я более того, скажу, что делать как  я сделал вообще не надо, по многим причинам(в смысле забивать вертекс буффер в класс, объектов которого предполагается достаточно большое количество.).  Но видите ли, раз уж я так сделал, и оно сделалось, то в качестве эксперимента хотелось бы уже довести до рабочего состояния, для очередного понимания С++.
Заметка...решил, ещё раз проверить доступность координат. Создал float в классе, memcpy туда координату X первого вертекса - скопировалось правильно...

#7
14:11, 12 дек 2017

восставший из праха
Делай по науке и всё будет работать. )))

#8
14:33, 12 дек 2017

gamedevfor
И всё же сабж не понятен. Почему не работает данный код. Несмотря, на то что все работает по отдельности. И хоть бы ошибку выдал...

#9
15:09, 12 дек 2017

восставший из праха
Так ты ж там куралесишь быдлокод вот и не работает.

#10
15:47, 12 дек 2017

gamedevfor
> Так ты ж там куралесишь быдлокод вот и не работает.
а может вам стоит покинуть эту тему, коли вам нечего сказать по сути вопроса. Я не против флуда, но в соответствущих темах, а тут всё же задан вопрос по коду.

#11
16:06, 12 дек 2017

восставший из праха
тебе ж посоветовали переписать быдлокод и сам ты как согласен с тем что у тебя быдлокод.
Так зачем кому то искать ошибки в быдлокоде?

#12
16:19, 12 дек 2017
+ Показать

Тем не менее вопрос всё ещё стоит.

#13
16:23, 12 дек 2017

восставший из праха
Ну жди с моря погоды, ты давно уже мог бы всё переписать и привести код в порядок.

#14
16:32, 12 дек 2017
+ Показать

Тем не менее вопрос всё ещё стоит. Причём я уверен, что ответ прост, как три рубля.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.