summaryrefslogtreecommitdiffhomepage
path: root/ovr_sdk_win_23.0.0/LibOVRKernel/Src/Util/Util_ImageWindow.h
diff options
context:
space:
mode:
Diffstat (limited to 'ovr_sdk_win_23.0.0/LibOVRKernel/Src/Util/Util_ImageWindow.h')
-rw-r--r--ovr_sdk_win_23.0.0/LibOVRKernel/Src/Util/Util_ImageWindow.h234
1 files changed, 234 insertions, 0 deletions
diff --git a/ovr_sdk_win_23.0.0/LibOVRKernel/Src/Util/Util_ImageWindow.h b/ovr_sdk_win_23.0.0/LibOVRKernel/Src/Util/Util_ImageWindow.h
new file mode 100644
index 0000000..a543000
--- /dev/null
+++ b/ovr_sdk_win_23.0.0/LibOVRKernel/Src/Util/Util_ImageWindow.h
@@ -0,0 +1,234 @@
+/************************************************************************************
+
+Filename : Util_ImageWindow.h
+Content : An output object for windows that can display raw images for testing
+Created : March 13, 2014
+Authors : Dean Beeler
+
+Copyright : Copyright 2014 Oculus, Inc. All Rights reserved.
+
+Licensed under the Oculus Master SDK License Version 1.0 (the "License");
+you may not use the Oculus VR Rift SDK except in compliance with the License,
+which is provided at the time of installation or download, or which
+otherwise accompanies this software in either electronic or hard copy form.
+
+You may obtain a copy of the License at
+
+https://developer.oculus.com/licenses/oculusmastersdk-1.0
+
+Unless required by applicable law or agreed to in writing, the Oculus VR SDK
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+*************************************************************************************/
+
+#ifndef OVR_Util_ImageWindow_h
+#define OVR_Util_ImageWindow_h
+
+#if defined(OVR_OS_WIN32)
+#include <d2d1.h>
+#include <dwrite.h>
+#include "Kernel/OVR_Win32_IncludeWindows.h"
+#endif
+
+#include "Kernel/OVR_Array.h"
+#include "Kernel/OVR_Deque.h"
+#include "Kernel/OVR_Threads.h"
+
+#include <stdint.h>
+
+namespace OVR {
+namespace Util {
+
+typedef struct {
+ float x;
+ float y;
+ float radius;
+ float r;
+ float g;
+ float b;
+ bool fill;
+} CirclePlot;
+
+typedef struct {
+ float x;
+ float y;
+ float r;
+ float g;
+ float b;
+ OVR::String text;
+} TextPlot;
+
+class Frame : virtual public RefCountBaseV<Frame> {
+ public:
+ Frame(int frame)
+ : frameNumber(frame),
+ plots(),
+ textLines(),
+ imageData(NULL),
+ colorImageData(NULL),
+ width(0),
+ height(0),
+ colorPitch(0),
+ ready(false) {}
+
+ ~Frame() {
+ if (imageData)
+ free(imageData);
+ if (colorImageData)
+ free(colorImageData);
+
+ plots.ClearAndRelease();
+ textLines.ClearAndRelease();
+ }
+
+ int frameNumber;
+
+ Array<CirclePlot> plots;
+ Array<TextPlot> textLines;
+ void* imageData;
+ void* colorImageData;
+ int width;
+ int height;
+ int colorPitch;
+ bool ready;
+};
+
+#if defined(OVR_OS_WIN32)
+class ImageWindow {
+ HWND hWindow;
+ ID2D1RenderTarget* pRT;
+ D2D1_SIZE_U resolution;
+
+ std::unique_ptr<Mutex> frontBufferMutex;
+
+ InPlaceMutableDeque<Ptr<Frame>> frames;
+
+ ID2D1Bitmap* greyBitmap;
+ ID2D1Bitmap* colorBitmap;
+
+ public:
+ // constructors
+ ImageWindow();
+ ImageWindow(uint32_t width, uint32_t height);
+ virtual ~ImageWindow();
+
+ void GetResolution(size_t& width, size_t& height) {
+ width = resolution.width;
+ height = resolution.height;
+ }
+
+ void OnPaint(); // Called by Windows when it receives a WM_PAINT message
+
+ void UpdateImage(const uint8_t* imageData, uint32_t width, uint32_t height) {
+ UpdateImageBW(imageData, width, height);
+ }
+ void UpdateImageBW(const uint8_t* imageData, uint32_t width, uint32_t height);
+ void UpdateImageRGBA(const uint8_t* imageData, uint32_t width, uint32_t height, uint32_t pitch);
+ void Complete(); // Called by drawing thread to submit a frame
+
+ void Process(); // Called by rendering thread to do window processing
+
+ void AssociateSurface(void* surface);
+
+ void addCircle(float x, float y, float radius, float r, float g, float b, bool fill);
+ void addText(float x, float y, float r, float g, float b, OVR::String text);
+
+ static ImageWindow* GlobalWindow(int window) {
+ return globalWindow[window];
+ }
+ static int WindowCount() {
+ return windowCount;
+ }
+
+ private:
+ Ptr<Frame> lastUnreadyFrame();
+
+ static const int MaxWindows = 4;
+ static ImageWindow* globalWindow[MaxWindows];
+ static int windowCount;
+ static ID2D1Factory* pD2DFactory;
+ static IDWriteFactory* pDWriteFactory;
+ static HINSTANCE hInstD2d1;
+ static HINSTANCE hInstDwrite;
+};
+
+#else
+
+class ImageWindow {
+ public:
+ // constructors
+ ImageWindow() {}
+ ImageWindow(uint32_t width, uint32_t height) {
+ OVR_UNUSED(width);
+ OVR_UNUSED(height);
+ }
+ virtual ~ImageWindow() {}
+
+ void GetResolution(size_t& width, size_t& height) {
+ width = 0;
+ height = 0;
+ }
+
+ void OnPaint() {}
+
+ void UpdateImage(const uint8_t* imageData, uint32_t width, uint32_t height) {
+ UpdateImageBW(imageData, width, height);
+ }
+ void UpdateImageBW(const uint8_t* imageData, uint32_t width, uint32_t height) {
+ OVR_UNUSED(imageData);
+ OVR_UNUSED(width);
+ OVR_UNUSED(height);
+ }
+ void UpdateImageRGBA(const uint8_t* imageData, uint32_t width, uint32_t height, uint32_t pitch) {
+ OVR_UNUSED(imageData);
+ OVR_UNUSED(width);
+ OVR_UNUSED(height);
+ OVR_UNUSED(pitch);
+ }
+ void Complete() {}
+
+ void Process() {}
+
+ void AssociateSurface(void* surface) {
+ OVR_UNUSED(surface);
+ }
+
+ void addCircle(float x, float y, float radius, float r, float g, float b, bool fill) {
+ OVR_UNUSED(x);
+ OVR_UNUSED(y);
+ OVR_UNUSED(radius);
+ OVR_UNUSED(r);
+ OVR_UNUSED(g);
+ OVR_UNUSED(b);
+ OVR_UNUSED(fill);
+ }
+ void addText(float x, float y, float r, float g, float b, OVR::String text) {
+ OVR_UNUSED(x);
+ OVR_UNUSED(y);
+ OVR_UNUSED(r);
+ OVR_UNUSED(g);
+ OVR_UNUSED(b);
+ OVR_UNUSED(text);
+ }
+
+ static ImageWindow* GlobalWindow(int window) {
+ return globalWindow[window];
+ }
+ static int WindowCount() {
+ return windowCount;
+ }
+
+ private:
+ static const int MaxWindows = 4;
+ static ImageWindow* globalWindow[4];
+ static int windowCount;
+};
+
+#endif
+} // namespace Util
+} // namespace OVR
+
+#endif