00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef __SURFELGPFRAMEBUFFER_H_
00031 #define __SURFELGPFRAMEBUFFER_H_
00032
00033 #include <qarray.h>
00034 #include <qvector.h>
00035 #include <qimage.h>
00036 #include <qsize.h>
00037 #include <qthread.h>
00038
00039 #include "../../../Core/Interfaces/src/FrameBufferInterface.h"
00040 #include "../../../Core/Interfaces/src/RendererInterface.h"
00041 #include "../../../Core/DataStructures/src/SurfelCollection.h"
00042 #include "../../../Core/Scene/src/Scene.h"
00043 #include "../../../DataTypes/src/Vector3D.h"
00044 #include "../../../DataTypes/src/Vector2D.h"
00045
00046 #include "SurfelPipeline_SurfSplat/Srf.h"
00047
00054 class SurfelGPFrameBuffer : public FrameBufferInterface {
00055
00056 public:
00057
00066 SurfelGPFrameBuffer (const QSize size = QSize (0, 0));
00067 virtual ~SurfelGPFrameBuffer();
00068
00075 void setSurfelContext(SrfContext *srf);
00076
00077
00078
00079
00080
00081 RENDERER_API void setAttributes (const int attriubtes);
00082 RENDERER_API int getAttributes() const;
00083 RENDERER_API void setValid (const bool valid);
00084 RENDERER_API bool isValid() const;
00085 RENDERER_API void setSize (const QSize newBufferSize);
00086 RENDERER_API QSize getSize() const;
00087
00088 RENDERER_API void setColor (const int x, const int y, const QRgb newPixelColor);
00089 RENDERER_API QRgb getColor (const int x, const int y) const;
00090 RENDERER_API const QImage *getImage() const;
00091 RENDERER_API void clearImage (const QRgb clearColor);
00092
00093 RENDERER_API void addWeight (const int x, const int y, const float pixelWeightIncrement);
00094 RENDERER_API void setWeight (const int x, const int y, const float newPixelweight);
00095 RENDERER_API float getWeight (const int x, const int y) const;
00096 RENDERER_API void setDepth (const int x, const int y, const float z);
00097 RENDERER_API float getDepth (const int x, const int y) const;
00098 RENDERER_API void setNormal (const int x, const int y, const Vector3D newNormal);
00099 RENDERER_API void setNormal (const int x, const int y, const float nx, const float ny, const float nz);
00100 RENDERER_API Vector3D getNormal (const int x, const int y) const;
00101 RENDERER_API SurfelInterface* getSurfel(const int x, const int y);
00102 RENDERER_API void addVisibleSurfel (const int x, const int y, SurfelInterface *visibleSurfel);
00103 RENDERER_API void getVisibleSurfels (const int x, const int y, const QArray<SurfelInterface *> **visibleSurfels, uint *nofVisible) const;
00104
00105 RENDERER_API void resetPosition (const int x, const int y);
00106 RENDERER_API bool isPixelCovered (const int x, const int y) const;
00107 RENDERER_API bool allPixelsCovered ();
00108
00109 RENDERER_API Object* getObjectAtPixel (const int x, const int y) const;
00110 RENDERER_API void setObjectAtPixel (const int x, const int y, Object *object);
00111
00112 RENDERER_API int getNofSplatInfoEntries() const;
00113 RENDERER_API const QArray<SurfelInterface *>& getSurfelsInViewFrustum() const;
00114 RENDERER_API const QArray<MyDataTypes::TextureCoordinate>& getTextureCoordinatesInViewFrustum() const;
00115 RENDERER_API const QArray<MyDataTypes::Splat>& getSplatsInViewFrustum() const;
00116 RENDERER_API void setSplatInfo (SurfelInterface *surfel, const float x, const float y, const float z, const float a, const float b_2, const float c, const int bbox[4]);
00117
00118 RENDERER_API QImage *getZImage() const;
00119 RENDERER_API float getMaxZValue() const;
00120 RENDERER_API float getMinZValue() const;
00121
00122 RENDERER_API QList<SurfelInterface> *getAllVisibleSurfels ();
00123 RENDERER_API void markAllSurfels ();
00124
00125 private:
00126
00127 typedef struct bufferEntry {
00128 uint nofVisible;
00129 QArray<SurfelInterface *> *visibleSurfels;
00130 Object *object;
00131 } BufferEntry;
00132
00133 BufferEntry *buffer;
00134
00135 QSize size;
00136 int height_1;
00137 int height;
00138 int width;
00139
00140 SrfZBufItem* srfFrameBuffer;
00141
00142
00143 int attributes;
00144 QImage *image;
00145
00146 bool valid;
00147
00148
00149 QArray<SurfelInterface*> surfels;
00150 QArray<MyDataTypes::TextureCoordinate> texCoords;
00151 QArray<MyDataTypes::Splat> splats;
00152
00153 uint nSplats;
00154
00155
00156 void initBuffer();
00157
00158
00159
00160 void resetBuffer();
00161
00162
00163 void removeBuffer();
00164
00165
00166
00167 };
00168
00169 #endif // __SURFELGPFRAMEBUFFER_H_
00170
00171
00172
00173
00174
00175
00176