1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program Reference Renderer 3 * ----------------------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Primitive packet 22 *//*--------------------------------------------------------------------*/ 23 24 #include "rrPrimitivePacket.hpp" 25 26 #include "rrVertexPacket.hpp" 27 28 namespace rr 29 { 30 31 GeometryEmitter::GeometryEmitter (VertexPacketAllocator& vpalloc, size_t numVertices) 32 : m_vpalloc (vpalloc) 33 , m_numEmitted (0) 34 , m_maxVertices (numVertices) 35 { 36 } 37 38 void GeometryEmitter::EmitVertex (const tcu::Vec4& position, float pointSize, const GenericVec4* varyings, int primitiveID) 39 { 40 VertexPacket* packet; 41 42 if (++m_numEmitted > m_maxVertices) 43 { 44 DE_FATAL("Undefined results, too many vertices emitted."); 45 return; 46 } 47 48 packet = m_vpalloc.alloc(); 49 50 packet->position = position; 51 packet->pointSize = pointSize; 52 packet->primitiveID = primitiveID; 53 54 for (size_t ndx = 0; ndx < m_vpalloc.getNumVertexOutputs(); ++ndx) 55 packet->outputs[ndx] = varyings[ndx]; 56 57 m_emitted.push_back(packet); 58 } 59 60 void GeometryEmitter::EndPrimitive (void) 61 { 62 m_numEmitted = 0; 63 m_emitted.push_back(DE_NULL); 64 } 65 66 void GeometryEmitter::moveEmittedTo (std::vector<VertexPacket*>& output) 67 { 68 m_emitted.swap(output); 69 m_emitted.clear(); 70 } 71 72 } // rr 73