А разве нет? И как тогда нужно правильно делать?
ENAleksey
> m_pVB = pVB;
о чем я и говорю. Ты сохраняешь тупо указатель на буффер, в котором данные меняются в течении кадра, толку от него 0.
А точно, это ведь указатель) Сейчас попробую сам буфер сохранять.
ENAleksey
> Сейчас попробую сам буфер сохранять.
чтение из буфера не очень шустрая операция. По хорошему между lock() unlock() узнать адрес данных в рам перед заливкой и скопировать их себе для отложенного рендера. Либо второй вариант, создать пул буфферов и для каждой модельки подсовывать свой включая вызовы lock() unlock().
Он видимо локает что бы анимацию ловить, а точнее измененную сетку персонажей.
Чтобы получить от них тени.
ronniko
кто он? lock приходит от движка игры, он в свою очередь локает чтобы залить актуальные данные для конкретной модели которая пойдет на рендер. При рендере след. модели очередной лок перезапишет этот буффер.
кто он?
ENAleksey
очередной лок перезапишет этот буффер.
Я думал ENAleksey это знает как дважды два !
Aroch
> По хорошему между lock() unlock() узнать адрес данных в рам перед заливкой и
> скопировать их себе для отложенного рендера.
То есть получить этот адрес?
SetTransform(D3DTS_WORLD, 0019F9B4) SetTransform( D3DTS_TEXTURE0, 0019F9C4) VertexBuffer( 0710F120)->Lock( 20448, 23008, 0019F95C, 6144) // 0019F95C этот? VertexBuffer( 0710F120)->Unlock( ) SetStreamSource( 0, 0710F120, 32) IndexBuffer( 0710F288)->Lock( 45556, 3462, 0019F9C0, 4096) IndexBuffer( 0710F288)->Unlock( ) SetIndices( 0710F288, 639) SetRenderState( D3DRS_ZWRITEENABLE, 1) SetTexture( 0, 119BC050) SetRenderState( D3DRS_ALPHABLENDENABLE, 0) SetRenderState( D3DRS_ALPHATESTENABLE, 0) DrawIndexedPrimitive( 4, 0, 719, 22778, 577) // Rock // STAGE_UNIT
Если да, то всё остальное понятно. Значит рисовать можно будет с помощью DrawIndexedPrimitiveUp, или это будет медленнее, и лучше записывать все данные в свой буфер?
ENAleksey
Ты скажи ты из Варкрафта таким способом все сетки ловишь каждый рендер-кадр ?
Тоесть не только персонажей, а и здания, траву, деревья, кочки ?
Если да, то как же это тормозит и садит FPS Варкрафта ?
Да, все декорации и юниты + ландшафт, только фильтрую частицы и всякие эффекты типа glow. 60 fps, правда пока не пробовал на больших сценах.
Ещё нужно будет как-то рендеринг в карту теней оптимизировать, но это уже потом.
Чувак сделай лучше риппер который рипает все, чам этой херней страдать
Polyflow3d, риппер для варкрафта или вообще? Если второе, то их полно в сети. А если для варкрафта, то зачем? Там и так все модели и текстуры лежат в открытых архивах игры. К тому же я сделал логгер примитивов и возможность рипнуть меш по указанным numVertices и primCount.
ENAleksey
полно - это какие? я знаю dxripper , он работает только с dx9, и ninja - он глючный весьма, и тоже вроде в dx11 не умеет .
ENAleksey
> VertexBuffer(0710F120)->Lock(20448, 23008, 0019F95C, 6144) // 0019F95C этот?
да, перед unlock'om сохрани 23008 байт в отдельный свой буффер.
грубо говоря:
DXWrapper::lock(int offset, size_t sz, void** buffer, DWORD vertex_decl) { size_t my_sz = sz; my_buffer = *buffer; vb->Lock( offset, sz, buffer, vertex_decl ); } DXWrapper::unlock( ) { model_data = new unsigned char[my_sz]; memcpy( ( void*)model_data, my_buffer, my_sz); vb->Unlock( ); }
Тема в архиве.
Тема закрыта.