From d5cd0bfb50418cafab1f81d0149a886d0f07763f Mon Sep 17 00:00:00 2001 From: Phillip Stephens Date: Mon, 2 Nov 2015 01:31:06 -0800 Subject: [PATCH] Various fixes --- CMakeLists.txt | 37 ++++++--- include/boo/IWindow.hpp | 8 ++ include/boo/graphicsdev/D3D11.hpp | 10 +-- include/boo/graphicsdev/D3D12.hpp | 10 +-- include/boo/graphicsdev/GL.hpp | 28 +++---- .../boo/graphicsdev/IGraphicsDataFactory.hpp | 8 +- lib/graphicsdev/D3D12.cpp | 10 +-- lib/graphicsdev/GL.cpp | 76 +++++++++++-------- lib/x11/WindowXCB.cpp | 33 +++++--- test/main.cpp | 19 +++-- 10 files changed, 146 insertions(+), 93 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e28f40c..640a860 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,15 @@ if (NOT TARGET LogVisor) endif() include_directories(include ${LOG_VISOR_INCLUDE_DIR}) +if(NOT GEKKO AND NOT CAFE) +list(APPEND PLAT_SRCS + lib/graphicsdev/GL.cpp + lib/graphicsdev/glew.c) + +list(APPEND PLAT_HDRS + include/boo/graphicsdev/GL.hpp) +endif() + if(WIN32) list(APPEND PLAT_SRCS lib/win/ApplicationWin32.cpp @@ -18,9 +27,12 @@ if(WIN32) lib/inputdev/HIDListenerWinUSB.cpp lib/inputdev/HIDDeviceWinUSB.cpp lib/graphicsdev/D3D11.cpp - lib/graphicsdev/D3D12.cpp - lib/graphicsdev/GL.cpp - lib/graphicsdev/glew.c) + lib/graphicsdev/D3D12.cpp) + + list(APPEND PLAT_HDRS + include/boo/graphicsdev/D3D11.hpp + include/boo/graphicsdev/D3D12.hpp) + list(APPEND _BOO_SYS_LIBS Winusb) elseif(APPLE) list(APPEND PLAT_SRCS @@ -28,15 +40,17 @@ elseif(APPLE) lib/mac/WindowCocoa.mm lib/mac/GLViewCocoa.mm lib/inputdev/HIDListenerIOKit.cpp - lib/inputdev/HIDDeviceIOKit.cpp - lib/graphicsdev/GL.cpp - lib/graphicsdev/glew.c) + lib/inputdev/HIDDeviceIOKit.cpp) + + list(APPEND PLAT_HDRS + include/boo/graphicsdev/Metal.hpp) + find_library(APPKIT_LIBRARY AppKit) find_library(IOKIT_LIBRARY IOKit) find_library(OPENGL_LIBRARY OpenGL) find_library(COREVIDEO_LIBRARY CoreVideo) list(APPEND _BOO_SYS_LIBS ${APPKIT_LIBRARY} ${IOKIT_LIBRARY} ${OPENGL_LIBRARY} ${COREVIDEO_LIBRARY}) -else() +else(NOT GEKKO) list(APPEND PLAT_SRCS lib/x11/ApplicationUnix.cpp lib/x11/ApplicationXCB.hpp @@ -49,6 +63,8 @@ else() lib/graphicsdev/GLX.cpp lib/graphicsdev/glew.c) +# list(APPEND PLAT_HDRS ) + find_package(PkgConfig) if(PKG_CONFIG_FOUND) pkg_check_modules(dbus_pkg QUIET libdbus dbus-1) @@ -116,15 +132,12 @@ add_library(Boo include/boo/IGraphicsContext.hpp include/boo/graphicsdev/IGraphicsDataFactory.hpp include/boo/graphicsdev/IGraphicsCommandQueue.hpp - include/boo/graphicsdev/GL.hpp - include/boo/graphicsdev/D3D11.hpp - include/boo/graphicsdev/D3D12.hpp - include/boo/graphicsdev/Metal.hpp include/boo/IWindow.hpp include/boo/IApplication.hpp include/boo/System.hpp include/boo/boo.hpp InputDeviceClasses.cpp - ${PLAT_SRCS}) + ${PLAT_SRCS} + ${PLAT_HDRS}) add_subdirectory(test) diff --git a/include/boo/IWindow.hpp b/include/boo/IWindow.hpp index c200bd7..3ff59e2 100644 --- a/include/boo/IWindow.hpp +++ b/include/boo/IWindow.hpp @@ -21,6 +21,12 @@ public: BUTTON_AUX2 = 5 }; + struct SWindowRect + { + int location[2]; + int size[2]; + }; + struct SWindowCoord { unsigned pixel[2]; @@ -84,6 +90,8 @@ public: MKEY_COMMAND = 1<<4 }; + virtual void resized(const SWindowRect& rect) + {(void)rect;} virtual void mouseDown(const SWindowCoord& coord, EMouseButton button, EModifierKey mods) {(void)coord;(void)button;(void)mods;} virtual void mouseUp(const SWindowCoord& coord, EMouseButton button, EModifierKey mods) diff --git a/include/boo/graphicsdev/D3D11.hpp b/include/boo/graphicsdev/D3D11.hpp index 4972d0d..7735970 100644 --- a/include/boo/graphicsdev/D3D11.hpp +++ b/include/boo/graphicsdev/D3D11.hpp @@ -18,21 +18,21 @@ public: Platform platform() const {return PlatformD3D11;} const char* platformName() const {return "Direct 3D 11";} - const IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t sz); + IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t sz); IGraphicsBufferD* newDynamicBuffer(BufferUse use); - const ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, + ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, const void* data, size_t sz); ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt); - const IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements); + IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements); - const IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource, + IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource, size_t texCount, const char** texNames, BlendFactor srcFac, BlendFactor dstFac, bool depthTest, bool depthWrite, bool backfaceCulling); - const IShaderDataBinding* + IShaderDataBinding* newShaderDataBinding(const IShaderPipeline* pipeline, const IVertexFormat* vtxFormat, const IGraphicsBuffer* vbo, const IGraphicsBuffer* ebo, diff --git a/include/boo/graphicsdev/D3D12.hpp b/include/boo/graphicsdev/D3D12.hpp index 72b9c63..5ad6075 100644 --- a/include/boo/graphicsdev/D3D12.hpp +++ b/include/boo/graphicsdev/D3D12.hpp @@ -28,22 +28,22 @@ public: Platform platform() const {return PlatformD3D12;} const char* platformName() const {return "Direct 3D 12";} - const IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count); + IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count); IGraphicsBufferD* newDynamicBuffer(BufferUse use, size_t stride, size_t count); - const ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, + ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, const void* data, size_t sz); ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt); - const IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements); + IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements); - const IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource, + IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource, ComPtr& vertBlobOut, ComPtr& fragBlobOut, const IVertexFormat* vtxFmt, BlendFactor srcFac, BlendFactor dstFac, bool depthTest, bool depthWrite, bool backfaceCulling); - const IShaderDataBinding* + IShaderDataBinding* newShaderDataBinding(IShaderPipeline* pipeline, IVertexFormat* vtxFormat, IGraphicsBuffer* vbo, IGraphicsBuffer* ebo, diff --git a/include/boo/graphicsdev/GL.hpp b/include/boo/graphicsdev/GL.hpp index b8381e3..850c67e 100644 --- a/include/boo/graphicsdev/GL.hpp +++ b/include/boo/graphicsdev/GL.hpp @@ -23,26 +23,26 @@ public: Platform platform() const {return PlatformOGLES3;} const char* platformName() const {return "OpenGL ES 3.0";} - const IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t sz); - IGraphicsBufferD* newDynamicBuffer(BufferUse use); + IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count); + IGraphicsBufferD* newDynamicBuffer(BufferUse use, size_t stride, size_t count); - const ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, + ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, const void* data, size_t sz); ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt); - const IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements); + IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements); - const IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource, - size_t texCount, const char** texNames, - BlendFactor srcFac, BlendFactor dstFac, - bool depthTest, bool depthWrite, bool backfaceCulling); + IShaderPipeline* newShaderPipeline(const char* vertSource, const char* fragSource, + size_t texCount, const char** texNames, + BlendFactor srcFac, BlendFactor dstFac, + bool depthTest, bool depthWrite, bool backfaceCulling); - const IShaderDataBinding* - newShaderDataBinding(const IShaderPipeline* pipeline, - const IVertexFormat* vtxFormat, - const IGraphicsBuffer* vbo, const IGraphicsBuffer* ebo, - size_t ubufCount, const IGraphicsBuffer** ubufs, - size_t texCount, const ITexture** texs); + IShaderDataBinding* + newShaderDataBinding(IShaderPipeline* pipeline, + IVertexFormat* vtxFormat, + IGraphicsBuffer* vbo, IGraphicsBuffer* ebo, + size_t ubufCount, IGraphicsBuffer** ubufs, + size_t texCount, ITexture** texs); void reset(); IGraphicsData* commit(); diff --git a/include/boo/graphicsdev/IGraphicsDataFactory.hpp b/include/boo/graphicsdev/IGraphicsDataFactory.hpp index dcb9729..122bda1 100644 --- a/include/boo/graphicsdev/IGraphicsDataFactory.hpp +++ b/include/boo/graphicsdev/IGraphicsDataFactory.hpp @@ -147,21 +147,21 @@ struct IGraphicsDataFactory virtual Platform platform() const=0; virtual const char* platformName() const=0; - virtual const IGraphicsBufferS* + virtual IGraphicsBufferS* newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count)=0; virtual IGraphicsBufferD* newDynamicBuffer(BufferUse use, size_t stride, size_t count)=0; - virtual const ITextureS* + virtual ITextureS* newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, const void* data, size_t sz)=0; virtual ITextureD* newDynamicTexture(size_t width, size_t height, TextureFormat fmt)=0; - virtual const IVertexFormat* + virtual IVertexFormat* newVertexFormat(size_t elementCount, const VertexElementDescriptor* elements)=0; - virtual const IShaderDataBinding* + virtual IShaderDataBinding* newShaderDataBinding(IShaderPipeline* pipeline, IVertexFormat* vtxFormat, IGraphicsBuffer* vbo, IGraphicsBuffer* ebo, diff --git a/lib/graphicsdev/D3D12.cpp b/lib/graphicsdev/D3D12.cpp index 1ea9923..5a52a80 100644 --- a/lib/graphicsdev/D3D12.cpp +++ b/lib/graphicsdev/D3D12.cpp @@ -141,7 +141,7 @@ public: } }; -const IGraphicsBufferS* +IGraphicsBufferS* D3D12DataFactory::newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count) { D3D12GraphicsBufferS* retval = new D3D12GraphicsBufferS(use, m_ctx, data, stride, count); @@ -246,7 +246,7 @@ public: } }; -const ITextureS* +ITextureS* D3D12DataFactory::newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, const void* data, size_t sz) { @@ -360,7 +360,7 @@ public: D3D12ShaderPipeline(const D3D12ShaderPipeline&) = delete; }; -const IShaderPipeline* D3D12DataFactory::newShaderPipeline +IShaderPipeline* D3D12DataFactory::newShaderPipeline (const char* vertSource, const char* fragSource, ComPtr& vertBlobOut, ComPtr& fragBlobOut, const IVertexFormat* vtxFmt, @@ -520,7 +520,7 @@ struct D3D12ShaderDataBinding : IShaderDataBinding } }; -const IShaderDataBinding* +IShaderDataBinding* D3D12DataFactory::newShaderDataBinding(IShaderPipeline* pipeline, IVertexFormat* vtxFormat, IGraphicsBuffer* vbuf, IGraphicsBuffer* ibuf, @@ -800,7 +800,7 @@ D3D12DataFactory::newDynamicTexture(size_t width, size_t height, TextureFormat f return retval; } -const IVertexFormat* D3D12DataFactory::newVertexFormat +IVertexFormat* D3D12DataFactory::newVertexFormat (size_t elementCount, const VertexElementDescriptor* elements) { D3D12CommandQueue* q = static_cast(m_parent->getCommandQueue()); diff --git a/lib/graphicsdev/GL.cpp b/lib/graphicsdev/GL.cpp index 6208991..b43d1b6 100644 --- a/lib/graphicsdev/GL.cpp +++ b/lib/graphicsdev/GL.cpp @@ -30,7 +30,7 @@ static const GLenum USE_TABLE[] = GL_UNIFORM_BUFFER }; -class GLES3GraphicsBufferS : IGraphicsBufferS +class GLES3GraphicsBufferS : public IGraphicsBufferS { friend class GLES3DataFactory; friend struct GLES3CommandQueue; @@ -54,7 +54,7 @@ public: {glBindBufferBase(GL_UNIFORM_BUFFER, idx, m_buf);} }; -class GLES3GraphicsBufferD : IGraphicsBufferD +class GLES3GraphicsBufferD : public IGraphicsBufferD { friend class GLES3DataFactory; friend struct GLES3CommandQueue; @@ -81,15 +81,15 @@ public: void bindUniform(size_t idx) const; }; -const IGraphicsBufferS* -GLES3DataFactory::newStaticBuffer(BufferUse use, const void* data, size_t sz) +IGraphicsBufferS* +GLES3DataFactory::newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count) { - GLES3GraphicsBufferS* retval = new GLES3GraphicsBufferS(use, data, sz); + GLES3GraphicsBufferS* retval = new GLES3GraphicsBufferS(use, data, stride * count); static_cast(m_deferredData)->m_SBufs.emplace_back(retval); return retval; } -class GLES3TextureS : ITextureS +class GLES3TextureS : public ITextureS { friend class GLES3DataFactory; GLuint m_tex; @@ -125,7 +125,7 @@ public: } }; -class GLES3TextureD : ITextureD +class GLES3TextureD : public ITextureD { friend class GLES3DataFactory; friend struct GLES3CommandQueue; @@ -168,7 +168,7 @@ public: } }; -const ITextureS* +ITextureS* GLES3DataFactory::newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, const void* data, size_t sz) { @@ -276,7 +276,7 @@ static const GLenum BLEND_FACTOR_TABLE[] = GL_ONE_MINUS_DST_ALPHA }; -const IShaderPipeline* GLES3DataFactory::newShaderPipeline +IShaderPipeline* GLES3DataFactory::newShaderPipeline (const char* vertSource, const char* fragSource, size_t texCount, const char** texNames, BlendFactor srcFac, BlendFactor dstFac, @@ -368,19 +368,19 @@ struct GLES3ShaderDataBinding : IShaderDataBinding const GLES3ShaderPipeline* m_pipeline; const GLES3VertexFormat* m_vtxFormat; size_t m_ubufCount; - std::unique_ptr m_ubufs; + std::unique_ptr m_ubufs; size_t m_texCount; - std::unique_ptr m_texs; - GLES3ShaderDataBinding(const IShaderPipeline* pipeline, - const IVertexFormat* vtxFormat, - size_t ubufCount, const IGraphicsBuffer** ubufs, - size_t texCount, const ITexture** texs) - : m_pipeline(static_cast(pipeline)), - m_vtxFormat(static_cast(vtxFormat)), + std::unique_ptr m_texs; + GLES3ShaderDataBinding(IShaderPipeline* pipeline, + IVertexFormat* vtxFormat, + size_t ubufCount, IGraphicsBuffer** ubufs, + size_t texCount, ITexture** texs) + : m_pipeline(static_cast(pipeline)), + m_vtxFormat(static_cast(vtxFormat)), m_ubufCount(ubufCount), - m_ubufs(new const IGraphicsBuffer*[ubufCount]), + m_ubufs(new IGraphicsBuffer*[ubufCount]), m_texCount(texCount), - m_texs(new const ITexture*[texCount]) + m_texs(new ITexture*[texCount]) { for (size_t i=0 ; ibind(); for (size_t i=0 ; ibindUniform(i); + if (m_ubufs[i]->dynamic()) + static_cast(m_ubufs[i])->bindUniform(i); + else + static_cast(m_ubufs[i])->bindUniform(i); glUniformBlockBinding(prog, i, i); } for (size_t i=0 ; ibind(i); + { + if (m_texs[i]->dynamic()) + static_cast(m_texs[i])->bind(i); + else + static_cast(m_texs[i])->bind(i); + } } }; -const IShaderDataBinding* -GLES3DataFactory::newShaderDataBinding(const IShaderPipeline* pipeline, - const IVertexFormat* vtxFormat, - const IGraphicsBuffer*, const IGraphicsBuffer*, - size_t ubufCount, const IGraphicsBuffer** ubufs, - size_t texCount, const ITexture** texs) +IShaderDataBinding* +GLES3DataFactory::newShaderDataBinding(IShaderPipeline* pipeline, + IVertexFormat* vtxFormat, + IGraphicsBuffer*, IGraphicsBuffer*, + size_t ubufCount, IGraphicsBuffer** ubufs, + size_t texCount, ITexture** texs) { GLES3ShaderDataBinding* retval = new GLES3ShaderDataBinding(pipeline, vtxFormat, ubufCount, ubufs, texCount, texs); @@ -549,12 +557,18 @@ struct GLES3CommandQueue : IGraphicsCommandQueue if (desc->vertBuffer != lastVBO) { lastVBO = desc->vertBuffer; - lastVBO->bindVertex(); + if (lastVBO->dynamic()) + static_cast(lastVBO)->bindVertex(); + else + static_cast(lastVBO)->bindVertex(); } if (desc->indexBuffer != lastEBO) { lastEBO = desc->indexBuffer; - lastEBO->bindIndex(); + if (lastEBO->dynamic()) + static_cast(lastEBO)->bindIndex(); + else + static_cast(lastEBO)->bindIndex(); } glEnableVertexAttribArray(i); glVertexAttribPointer(i, SEMANTIC_COUNT_TABLE[desc->semantic], @@ -820,7 +834,7 @@ void GLES3GraphicsBufferD::bindUniform(size_t idx) const {glBindBufferBase(GL_UNIFORM_BUFFER, idx, m_bufs[m_q->m_drawBuf]);} IGraphicsBufferD* -GLES3DataFactory::newDynamicBuffer(BufferUse use) +GLES3DataFactory::newDynamicBuffer(BufferUse use, size_t stride, size_t count) { GLES3CommandQueue* q = static_cast(m_parent->getCommandQueue()); GLES3GraphicsBufferD* retval = new GLES3GraphicsBufferD(q, use); @@ -863,7 +877,7 @@ GLES3VertexFormat::GLES3VertexFormat(GLES3CommandQueue* q, size_t elementCount, } GLES3VertexFormat::~GLES3VertexFormat() {m_q->delVertexFormat(this);} -const IVertexFormat* GLES3DataFactory::newVertexFormat +IVertexFormat* GLES3DataFactory::newVertexFormat (size_t elementCount, const VertexElementDescriptor* elements) { GLES3CommandQueue* q = static_cast(m_parent->getCommandQueue()); diff --git a/lib/x11/WindowXCB.cpp b/lib/x11/WindowXCB.cpp index f4fe288..73873b9 100644 --- a/lib/x11/WindowXCB.cpp +++ b/lib/x11/WindowXCB.cpp @@ -315,16 +315,12 @@ public: { fprintf(stderr, "%s\n", message); } - typedef void(*glDebugMessageCallbackPROC)(DEBUGPROC callback​, void* userParam​); + typedef void(*glDebugMessageCallbackPROC)(DEBUGPROC callback, void* userParam); void postInit() { GLXExtensionCheck(); GLXEnableVSync(m_xDisp, m_glxWindow); - - glDebugMessageCallbackPROC glDebugMessageCb = (glDebugMessageCallbackPROC) - glXGetProcAddressARB((const GLubyte*)"glDebugMessageCallback​"); - glDebugMessageCb(DebugCb, nullptr); } IGraphicsCommandQueue* getCommandQueue() @@ -337,7 +333,7 @@ public: IGraphicsDataFactory* getDataFactory() { if (!m_dataFactory) - m_dataFactory = new struct GLES3DataFactory(this); + m_dataFactory = new class GLES3DataFactory(this); return m_dataFactory; } @@ -446,7 +442,7 @@ public: XIEventMask mask = {XIAllMasterDevices, XIMaskLen(XI_LASTEVENT)}; mask.mask = (unsigned char*)malloc(mask.mask_len); memset(mask.mask, 0, mask.mask_len); - XISetMask(mask.mask, XI_Motion); + /* XISetMask(mask.mask, XI_Motion); Can't do this without losing mouse move events :( */ XISetMask(mask.mask, XI_TouchBegin); XISetMask(mask.mask, XI_TouchUpdate); XISetMask(mask.mask, XI_TouchEnd); @@ -765,6 +761,12 @@ public: m_wy = event->xexpose.y; m_ww = event->xexpose.width; m_wh = event->xexpose.height; + if (m_callback) + { + IWindowCallback::SWindowRect rect = + { {m_wx, m_wy}, {m_ww, m_wh} }; + m_callback->resized(rect); + } return; } case ConfigureNotify: @@ -775,6 +777,13 @@ public: m_wy = event->xconfigure.y; m_ww = event->xconfigure.width; m_wh = event->xconfigure.height; + + if (m_callback) + { + IWindowCallback::SWindowRect rect = + { {m_wx, m_wy}, {m_ww, m_wh} }; + m_callback->resized(rect); + } } return; } @@ -822,6 +831,7 @@ public: { if (m_callback) { + getWindowFrame(m_wx, m_wy, m_ww, m_wh); int button = translateButton(event->xbutton.button); if (button) { @@ -830,7 +840,7 @@ public: { {(unsigned)event->xbutton.x, (unsigned)event->xbutton.y}, {(unsigned)(event->xbutton.x / m_pixelFactor), (unsigned)(event->xbutton.y / m_pixelFactor)}, - {event->xbutton.x / (float)m_ww, event->xbutton.y / (float)m_wh} + {float(event->xbutton.x) / float(m_ww), float(event->xbutton.y) / float(m_wh)} }; m_callback->mouseDown(coord, (IWindowCallback::EMouseButton)button, (IWindowCallback::EModifierKey)modifierMask); @@ -844,7 +854,7 @@ public: { {(unsigned)event->xbutton.x, (unsigned)event->xbutton.y}, {(unsigned)(event->xbutton.x / m_pixelFactor), (unsigned)(event->xbutton.y / m_pixelFactor)}, - {event->xbutton.x / (float)m_ww, event->xbutton.y / (float)m_wh} + {(float)event->xbutton.x / (float)m_ww, (float)event->xbutton.y / (float)m_wh} }; IWindowCallback::SScrollDelta scrollDelta = { @@ -868,6 +878,7 @@ public: { if (m_callback) { + getWindowFrame(m_wx, m_wy, m_ww, m_wh); int button = translateButton(event->xbutton.button); if (button) { @@ -888,6 +899,7 @@ public: { if (m_callback) { + getWindowFrame(m_wx, m_wy, m_ww, m_wh); IWindowCallback::SWindowCoord coord = { {(unsigned)event->xmotion.x, (unsigned)event->xmotion.y}, @@ -902,10 +914,13 @@ public: { if (event->xgeneric.extension == XINPUT_OPCODE) { + getWindowFrame(m_wx, m_wy, m_ww, m_wh); switch (event->xgeneric.evtype) { case XI_Motion: { + fprintf(stderr, "motion\n"); + XIDeviceEvent* ev = (XIDeviceEvent*)event; if (m_lastInputID != ev->deviceid) _pointingDeviceChanged(ev->deviceid); diff --git a/test/main.cpp b/test/main.cpp index 6ac9416..7b9557c 100644 --- a/test/main.cpp +++ b/test/main.cpp @@ -115,6 +115,9 @@ public: struct CTestWindowCallback : IWindowCallback { + void resized(const SWindowRect& rect) + { fprintf(stderr, "Resized %d, %d (%d, %d)\n", rect.size[0], rect.size[1], rect.location[0], rect.location[1]); } + void mouseDown(const SWindowCoord& coord, EMouseButton button, EModifierKey mods) { fprintf(stderr, "Mouse Down %d (%f,%f)\n", button, coord.norm[0], coord.norm[1]); @@ -125,7 +128,7 @@ struct CTestWindowCallback : IWindowCallback } void mouseMove(const SWindowCoord& coord) { - //fprintf(stderr, "Mouse Move (%f,%f)\n", coord.norm[0], coord.norm[1]); + fprintf(stderr, "Mouse Move (%f,%f)\n", coord.norm[0], coord.norm[1]); } void scroll(const SWindowCoord& coord, const SScrollDelta& scroll) { @@ -201,16 +204,16 @@ struct TestApplicationCallback : IApplicationCallback {{0.5,-0.5},{1.0,0.0}}, {{-0.5,-0.5},{0.0,0.0}} }; - const IGraphicsBuffer* vbo = - factory->newStaticBuffer(BufferUseVertex, quad, sizeof(quad)); + IGraphicsBuffer* vbo = + factory->newStaticBuffer(BufferUseVertex, quad, sizeof(quad), 4); /* Make vertex format */ - const VertexElementDescriptor descs[2] = + VertexElementDescriptor descs[2] = { {vbo, nullptr, VertexSemanticPosition}, {vbo, nullptr, VertexSemanticUV} }; - const IVertexFormat* vfmt = factory->newVertexFormat(2, descs); + IVertexFormat* vfmt = factory->newVertexFormat(2, descs); /* Make ramp texture */ using Pixel = uint8_t[4]; @@ -223,7 +226,7 @@ struct TestApplicationCallback : IApplicationCallback tex[i][j][2] = 0; tex[i][j][3] = 0xff; } - const ITexture* texture = + ITexture* texture = factory->newStaticTexture(256, 256, 1, TextureFormatRGBA8, tex, 256*256*4); /* Make shader pipeline */ @@ -251,7 +254,7 @@ struct TestApplicationCallback : IApplicationCallback static const char* TexNames[] = {"smplr"}; - const IShaderPipeline* pipeline = + IShaderPipeline* pipeline = factory->newShaderPipeline(VS, FS, 1, TexNames, BlendFactorOne, BlendFactorZero, true, true, false); /* Make shader data binding */ @@ -301,7 +304,7 @@ struct TestApplicationCallback : IApplicationCallback gfxQ->present(); gfxQ->execute(); - fprintf(stderr, "%zu\n", frameIdx); + //fprintf(stderr, "%zu\n", frameIdx); ++frameIdx; if ((frameIdx - lastCheck) > 100)