H. Verbeet : wined3d:
Set vertex attribute pointers defined in vertex declarations properly.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Mar 22 15:09:06 CST 2006
Module: wine
Branch: refs/heads/master
Commit: 1aca53860a4c7549fda3d798a50f0512ac36b4c5
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=1aca53860a4c7549fda3d798a50f0512ac36b4c5
Author: H. Verbeet <hverbeet at gmail.com>
Date: Wed Mar 22 19:47:54 2006 +0000
wined3d: Set vertex attribute pointers defined in vertex declarations properly.
---
dlls/wined3d/drawprim.c | 14 ++++++++++++++
dlls/wined3d/vertexshader.c | 10 ----------
2 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 6f14dff..34241bd 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -325,6 +325,7 @@ void primitiveDeclarationConvertToStride
int i;
WINED3DVERTEXELEMENT *element;
DWORD stride;
+ int reg;
/* Locate the vertex declaration */
if (useVertexShaderFunction && ((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->vertexDeclaration) {
@@ -350,8 +351,21 @@ void primitiveDeclarationConvertToStride
stride = This->stateBlock->streamStride[element->Stream];
data += (BaseVertexIndex * stride);
data += element->Offset;
+ reg = element->Reg;
TRACE("Offset %d Stream %d UsageIndex %d\n", element->Offset, element->Stream, element->UsageIndex);
+
+ if (useVertexShaderFunction && reg != -1 && data) {
+ WINED3DGLTYPE glType = glTypeLookup[element->Type];
+
+ TRACE("(%p) : Set vertex attrib pointer: reg 0x%08x, d3d type 0x%08x, stride 0x%08lx, data %p)\n", This, reg, element->Type, stride, data);
+
+ GL_EXTCALL(glVertexAttribPointerARB(reg, glType.size, glType.glType, glType.normalized, stride, data));
+ checkGLcall("glVertexAttribPointerARB");
+ GL_EXTCALL(glEnableVertexAttribArrayARB(reg));
+ checkGLcall("glEnableVertexAttribArrayARB");
+ }
+
switch (element->Usage) {
case D3DDECLUSAGE_POSITION:
switch (element->UsageIndex) {
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index d3e3801..c4732bc 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.c
@@ -1245,16 +1245,6 @@ inline static VOID IWineD3DVertexShaderI
/* TODO: renumbering of attributes if the values are higher than the highest supported attribute but the total number of attributes is less than the highest supported attribute */
This->highestConstant = -1;
- /* Parse the vertex declaration and store the used elements in arrayUsageMap. */
- if(This->vertexDeclaration) {
- for (i = 0 ; i < ((IWineD3DVertexDeclarationImpl*)This->vertexDeclaration)->declarationWNumElements - 1; ++i) {
- WINED3DVERTEXELEMENT *element = ((IWineD3DVertexDeclarationImpl*)This->vertexDeclaration)->pDeclarationWine + i;
- INT usage = element->Usage | (element->UsageIndex << 16);
- BYTE arrayNo = element->Reg;
- parse_decl_usage(This, usage, arrayNo);
- }
- }
-
/**
* First pass to determine what we need to declare:
* - Temporary variables
More information about the wine-cvs
mailing list