在FragementShader的begin函数中准备输入的顶点数据偏移
This commit is contained in:
@@ -22,9 +22,9 @@ public:
|
||||
bool addElement(const std::string& name, VertexElementType elementType,
|
||||
ComponentType componentType, DataType dataType);
|
||||
|
||||
const Element* getElement(size_t index) const;
|
||||
const Element* getElement(VertexElementType elementType) const;
|
||||
const Element* getElement(const std::string& name) const;
|
||||
const Element* getElementByIndex(size_t index) const;
|
||||
const Element* getElementByType(VertexElementType elementType) const;
|
||||
const Element* getElementByName(const std::string& name) const;
|
||||
|
||||
//total byte size of each vertex
|
||||
size_t vertexByteSize(void) const { return m_vertexSize; }
|
||||
|
||||
@@ -28,9 +28,9 @@ class FragementShaderInterface
|
||||
public:
|
||||
virtual const char* getName(void) const = 0;
|
||||
|
||||
virtual void begin(const RenderPipe* pipe, MaterialConstPtr material) = 0;
|
||||
virtual bool begin(const RenderPipe* pipe, MaterialConstPtr material, const VertexDesc& veretexDesc) = 0;
|
||||
|
||||
virtual void process(const VertexDesc& veretexDesc, const float32_t* pixelData, fVector4& color) = 0;
|
||||
virtual void process(const float32_t* pixelData, fVector4& color) = 0;
|
||||
|
||||
virtual void end() = 0;
|
||||
};
|
||||
|
||||
@@ -75,7 +75,7 @@ bool VertexDesc::addElement(const std::string& name, VertexElementType elementTy
|
||||
return true;
|
||||
}
|
||||
|
||||
const VertexDesc::Element* VertexDesc::getElement(size_t index) const
|
||||
const VertexDesc::Element* VertexDesc::getElementByIndex(size_t index) const
|
||||
{
|
||||
if (index >= m_elements.size())
|
||||
{
|
||||
@@ -84,24 +84,24 @@ const VertexDesc::Element* VertexDesc::getElement(size_t index) const
|
||||
return &(m_elements[index]);
|
||||
}
|
||||
|
||||
const VertexDesc::Element* VertexDesc::getElement(VertexElementType type) const
|
||||
const VertexDesc::Element* VertexDesc::getElementByType(VertexElementType type) const
|
||||
{
|
||||
auto it = m_elementTypeMap.find(type);
|
||||
if (it == m_elementTypeMap.end())
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
return getElement(it->second);
|
||||
return getElementByIndex(it->second);
|
||||
}
|
||||
|
||||
const VertexDesc::Element* VertexDesc::getElement(const std::string& name) const
|
||||
const VertexDesc::Element* VertexDesc::getElementByName(const std::string& name) const
|
||||
{
|
||||
auto it = m_nameMap.find(name);
|
||||
if (it == m_nameMap.end())
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
return getElement(it->second);
|
||||
return getElementByIndex(it->second);
|
||||
}
|
||||
|
||||
DV_CORE_END_NAMESPACE
|
||||
|
||||
@@ -64,7 +64,7 @@ void VertexShaderStep::process(RenderPipe& pipe, const InputAssemberStep::NodeAr
|
||||
|
||||
//TODO: div-zero
|
||||
|
||||
size_t ndcPosOffset = outputNode.vertexDesc.getElement(VET_POSITION_NDC)->offset;
|
||||
size_t ndcPosOffset = outputNode.vertexDesc.getElementByType(VET_POSITION_NDC)->offset;
|
||||
const fVector3* vertexNDCPos = (const fVector3*)(outputVertexMemory+ndcPosOffset);
|
||||
|
||||
outputNode.depth[i] = (std::fabsf(vertexNDCPos->z) - cameraNear) / (cameraFar - cameraNear);
|
||||
|
||||
@@ -31,10 +31,14 @@ void RasterizerStep::process(RenderPipe& pipe, const VertexShaderStep::NodeArray
|
||||
debugMaterial->pickupParam(node.material);
|
||||
}
|
||||
FragementShaderInterface* fragementShader = debugMaterial ? debugMaterial->getFragementShader() : node.material->getFragementShader();
|
||||
fragementShader->begin(&pipe, debugMaterial ?debugMaterial : node.material);
|
||||
if (!(fragementShader->begin(&pipe, debugMaterial ? debugMaterial : node.material, node.vertexDesc)))
|
||||
{
|
||||
//TODO: shader fallback
|
||||
continue;
|
||||
}
|
||||
|
||||
size_t vertexSize = node.vertexDesc.vertexByteSize();
|
||||
size_t POS_offset = node.vertexDesc.getElement(VET_POSITION_NDC)->offset;
|
||||
size_t POS_offset = node.vertexDesc.getElementByType(VET_POSITION_NDC)->offset;
|
||||
|
||||
for (size_t i = 0; i < node.vertexCounts; i += 3)
|
||||
{
|
||||
@@ -69,13 +73,8 @@ void RasterizerStep::process(RenderPipe& pipe, const VertexShaderStep::NodeArray
|
||||
pixelData[j] = MathUtil::lerp3(vertex0[j], vertex1[j], vertex2[j], percentCorrected);
|
||||
}
|
||||
|
||||
//if(dot.first==570 && dot.second==405 )
|
||||
//{
|
||||
// int a = 0;
|
||||
//}
|
||||
fVector4 color;
|
||||
fragementShader->process(node.vertexDesc, &(pixelData[0]), color);
|
||||
|
||||
fragementShader->process(pixelData.data(), color);
|
||||
|
||||
float32_t depth = MathUtil::lerp3(vertexDepth[0], vertexDepth[1], vertexDepth[2], percentCorrected);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user