further development
git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@17 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
@@ -63,17 +63,35 @@
|
||||
#endif
|
||||
#elif JUCE_MAC
|
||||
#if defined (MAC_OS_X_VERSION_10_7) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7)
|
||||
#define JUCE_OPENGL3 1
|
||||
#define JUCE_OPENGL3 1
|
||||
#include <OpenGL/gl3.h>
|
||||
#include <OpenGL/gl3ext.h>
|
||||
#else
|
||||
#include <OpenGL/gl.h>
|
||||
#include "OpenGL/glext.h"
|
||||
#include <OpenGL/glext.h>
|
||||
#endif
|
||||
#elif JUCE_ANDROID
|
||||
#include <GLES2/gl2.h>
|
||||
#endif
|
||||
|
||||
#if GL_ES_VERSION_3_0
|
||||
#define JUCE_OPENGL3 1
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
/** This macro is a helper for use in GLSL shader code which needs to compile on both OpenGL 2.1 and OpenGL 3.0.
|
||||
It's mandatory in OpenGL 3.0 to specify the GLSL version.
|
||||
*/
|
||||
#if JUCE_OPENGL3
|
||||
#if JUCE_OPENGL_ES
|
||||
#define JUCE_GLSL_VERSION "#version 300 es"
|
||||
#else
|
||||
#define JUCE_GLSL_VERSION "#version 150"
|
||||
#endif
|
||||
#else
|
||||
#define JUCE_GLSL_VERSION ""
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
#if JUCE_OPENGL_ES || defined (DOXYGEN)
|
||||
/** This macro is a helper for use in GLSL shader code which needs to compile on both GLES and desktop GL.
|
||||
|
||||
@@ -118,7 +118,7 @@ public:
|
||||
|
||||
bool createdOk() const noexcept { return getRawContext() != nullptr; }
|
||||
void* getRawContext() const noexcept { return context; }
|
||||
GLuint getFrameBufferID() const noexcept { return frameBufferHandle; }
|
||||
GLuint getFrameBufferID() const noexcept { return useMSAA ? msaaBufferHandle : frameBufferHandle; }
|
||||
|
||||
bool makeActive() const noexcept
|
||||
{
|
||||
@@ -142,6 +142,18 @@ public:
|
||||
|
||||
void swapBuffers()
|
||||
{
|
||||
if (useMSAA)
|
||||
{
|
||||
glBindFramebuffer (GL_DRAW_FRAMEBUFFER, frameBufferHandle);
|
||||
glBindFramebuffer (GL_READ_FRAMEBUFFER, msaaBufferHandle);
|
||||
|
||||
#if defined (__IPHONE_7_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0
|
||||
glBlitFramebuffer (0, 0, lastWidth, lastHeight, 0, 0, lastWidth, lastHeight, GL_COLOR_BUFFER_BIT, GL_NEAREST);
|
||||
#else
|
||||
glResolveMultisampleFramebufferAPPLE();
|
||||
#endif
|
||||
}
|
||||
|
||||
glBindRenderbuffer (GL_RENDERBUFFER, colorBufferHandle);
|
||||
[context presentRenderbuffer: GL_RENDERBUFFER];
|
||||
|
||||
@@ -189,7 +201,7 @@ private:
|
||||
int swapFrames;
|
||||
bool useDepthBuffer, useMSAA;
|
||||
|
||||
bool createContext (NSUInteger type, void* contextToShare)
|
||||
bool createContext (EAGLRenderingAPI type, void* contextToShare)
|
||||
{
|
||||
jassert (context == nil);
|
||||
context = [EAGLContext alloc];
|
||||
@@ -233,7 +245,7 @@ private:
|
||||
glBindFramebuffer (GL_FRAMEBUFFER, msaaBufferHandle);
|
||||
glBindRenderbuffer (GL_RENDERBUFFER, msaaColorHandle);
|
||||
|
||||
glRenderbufferStorageMultisampleAPPLE (GL_RENDERBUFFER, 4, GL_RGBA8_OES, width, height);
|
||||
glRenderbufferStorageMultisample (GL_RENDERBUFFER, 4, GL_RGBA8, width, height);
|
||||
|
||||
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, msaaColorHandle);
|
||||
}
|
||||
@@ -244,7 +256,7 @@ private:
|
||||
glBindRenderbuffer (GL_RENDERBUFFER, depthBufferHandle);
|
||||
|
||||
if (useMSAA)
|
||||
glRenderbufferStorageMultisampleAPPLE (GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16, width, height);
|
||||
glRenderbufferStorageMultisample (GL_RENDERBUFFER, 4, GL_DEPTH_COMPONENT16, width, height);
|
||||
else
|
||||
glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
==============================================================================
|
||||
*/
|
||||
|
||||
extern ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component*, void* parent);
|
||||
extern ComponentPeer* createNonRepaintingEmbeddedWindowsPeer (Component&, void* parent);
|
||||
|
||||
//==============================================================================
|
||||
class OpenGLContext::NativeContext
|
||||
@@ -33,7 +33,9 @@ public:
|
||||
void* contextToShareWith,
|
||||
bool /*useMultisampling*/,
|
||||
OpenGLVersion)
|
||||
: context (nullptr)
|
||||
{
|
||||
dummyComponent = new DummyComponent (*this);
|
||||
createNativeWindow (component);
|
||||
|
||||
PIXELFORMATDESCRIPTOR pfd;
|
||||
@@ -82,8 +84,8 @@ public:
|
||||
releaseDC();
|
||||
}
|
||||
|
||||
void initialiseOnRenderThread (OpenGLContext&) {}
|
||||
void shutdownOnRenderThread() { deactivateCurrentContext(); }
|
||||
void initialiseOnRenderThread (OpenGLContext& c) { context = &c; }
|
||||
void shutdownOnRenderThread() { deactivateCurrentContext(); context = nullptr; }
|
||||
|
||||
static void deactivateCurrentContext() { wglMakeCurrent (0, 0); }
|
||||
bool makeActive() const noexcept { return isActive() || wglMakeCurrent (dc, renderContext) != FALSE; }
|
||||
@@ -114,13 +116,30 @@ public:
|
||||
void* getRawContext() const noexcept { return renderContext; }
|
||||
unsigned int getFrameBufferID() const noexcept { return 0; }
|
||||
|
||||
void triggerRepaint()
|
||||
{
|
||||
if (context != nullptr)
|
||||
context->triggerRepaint();
|
||||
}
|
||||
|
||||
struct Locker { Locker (NativeContext&) {} };
|
||||
|
||||
private:
|
||||
Component dummyComponent;
|
||||
struct DummyComponent : public Component
|
||||
{
|
||||
DummyComponent (NativeContext& c) : context (c) {}
|
||||
|
||||
// The windowing code will call this when a paint callback happens
|
||||
void handleCommandMessage (int) override { context.triggerRepaint(); }
|
||||
|
||||
NativeContext& context;
|
||||
};
|
||||
|
||||
ScopedPointer<DummyComponent> dummyComponent;
|
||||
ScopedPointer<ComponentPeer> nativeWindow;
|
||||
HGLRC renderContext;
|
||||
HDC dc;
|
||||
OpenGLContext* context;
|
||||
|
||||
#define JUCE_DECLARE_WGL_EXTENSION_FUNCTION(name, returnType, params) \
|
||||
typedef returnType (__stdcall *type_ ## name) params; type_ ## name name;
|
||||
@@ -142,7 +161,7 @@ private:
|
||||
void createNativeWindow (Component& component)
|
||||
{
|
||||
Component* topComp = component.getTopLevelComponent();
|
||||
nativeWindow = createNonRepaintingEmbeddedWindowsPeer (&dummyComponent, topComp->getWindowHandle());
|
||||
nativeWindow = createNonRepaintingEmbeddedWindowsPeer (*dummyComponent, topComp->getWindowHandle());
|
||||
|
||||
if (ComponentPeer* peer = topComp->getPeer())
|
||||
updateWindowPosition (peer->getAreaCoveredBy (component));
|
||||
|
||||
@@ -81,8 +81,8 @@ String OpenGLHelpers::translateVertexShaderToV3 (const String& code)
|
||||
{
|
||||
#if JUCE_OPENGL3
|
||||
if (OpenGLShaderProgram::getLanguageVersion() > 1.2)
|
||||
return "#version 150\n" + code.replace ("attribute", "in")
|
||||
.replace ("varying", "out");
|
||||
return JUCE_GLSL_VERSION "\n" + code.replace ("attribute", "in")
|
||||
.replace ("varying", "out");
|
||||
#endif
|
||||
|
||||
return code;
|
||||
@@ -92,7 +92,7 @@ String OpenGLHelpers::translateFragmentShaderToV3 (const String& code)
|
||||
{
|
||||
#if JUCE_OPENGL3
|
||||
if (OpenGLShaderProgram::getLanguageVersion() > 1.2)
|
||||
return "#version 150\n"
|
||||
return JUCE_GLSL_VERSION "\n"
|
||||
"out vec4 fragColor;\n"
|
||||
+ code.replace ("varying", "in")
|
||||
.replace ("texture2D", "texture")
|
||||
|
||||
Reference in New Issue
Block a user