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
00027
#ifndef PBUFFERSTREAMS_HPP
00028
#define PBUFFERSTREAMS_HPP
00029
00030
#include "ShProgram.hpp"
00031
#include "GlBackend.hpp"
00032
00033
namespace shgl {
00034
00035
enum FloatExtension {
00036 SH_ARB_NV_FLOAT_BUFFER,
00037 SH_ARB_ATI_PIXEL_FORMAT_FLOAT,
00038 SH_ARB_NO_FLOAT_EXT
00039 };
00040
00041
#ifndef WIN32
00042
struct ShGLXPBufferInfo {
00043 ShGLXPBufferInfo()
00044 : extension(SH_ARB_NO_FLOAT_EXT),
00045 pbuffer(0), context(0), width(0), height(0),
00046 shcontext(-1)
00047 {
00048 }
00049 FloatExtension extension;
00050 GLXPbuffer pbuffer;
00051 GLXContext context;
00052
int width, height;
00053
int shcontext;
00054
bool valid() {
return extension != SH_ARB_NO_FLOAT_EXT
00055 && pbuffer
00056 && context; }
00057 };
00058
#endif
00059
00060
struct PBufferStreams :
public StreamStrategy {
00061 PBufferStreams(
int context = 0);
00062
virtual ~PBufferStreams();
00063
virtual StreamStrategy* create(
int context);
00064
virtual void execute(
const SH::ShProgramNodeCPtr& program,
SH::ShStream& dest);
00065
00066
private:
00067
int m_context;
00068
00069 FloatExtension setupContext(
int width,
int height);
00070
00071
int m_setup_vp;
00072
SH::ShProgram m_vp;
00073
00074
#ifndef WIN32
00075
Display* m_display;
00076 ShGLXPBufferInfo m_info;
00077
#endif
00078
};
00079
00080 }
00081
#endif