]> git.sesse.net Git - casparcg/blobdiff - common/gl/gl_check.h
[logging] Log timestamp when logging call was made instead of when the logging sink...
[casparcg] / common / gl / gl_check.h
index 177ecbd65619aa7d2d06a55accbd06c0245a8ed6..f6ceb852571c2fe5c923e68b2b0765500895bc12 100644 (file)
@@ -1,56 +1,73 @@
-////////////////////////////////////////////////////////////\r
-//\r
-// SFML - Simple and Fast Multimedia Library\r
-// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)\r
-//\r
-// This software is provided 'as-is', without any express or implied warranty.\r
-// In no event will the authors be held liable for any damages arising from the use of this software.\r
-//\r
-// Permission is granted to anyone to use this software for any purpose,\r
-// including commercial applications, and to alter it and redistribute it freely,\r
-// subject to the following restrictions:\r
-//\r
-// 1. The origin of this software must not be misrepresented;\r
-//    you must not claim that you wrote the original software.\r
-//    If you use this software in a product, an acknowledgment\r
-//    in the product documentation would be appreciated but is not required.\r
-//\r
-// 2. Altered source versions must be plainly marked as such,\r
-//    and must not be misrepresented as being the original software.\r
-//\r
-// 3. This notice may not be removed or altered from any source distribution.\r
-//\r
-////////////////////////////////////////////////////////////\r
-\r
-#pragma once\r
-\r
-#include "../exception/exceptions.h"\r
-\r
-namespace caspar { namespace gl {\r
-\r
-struct ogl_exception                                                   : virtual caspar_exception{};\r
-struct ogl_invalid_enum                                                        : virtual ogl_exception{};\r
-struct ogl_invalid_value                                               : virtual ogl_exception{};\r
-struct ogl_invalid_operation                                   : virtual ogl_exception{};\r
-struct ogl_stack_overflow                                              : virtual ogl_exception{};\r
-struct ogl_stack_underflow                                             : virtual ogl_exception{};                      \r
-struct ogl_out_of_memory                                               : virtual ogl_exception{};\r
-struct ogl_invalid_framebuffer_operation_ext   : virtual ogl_exception{};\r
-\r
-void SMFL_GLCheckError(const std::string& expr, const std::string& File, unsigned int Line);\r
-\r
-//#ifdef _DEBUG\r
-       \r
-#define CASPAR_GL_EXPR_STR(expr) #expr\r
-\r
-#define GL(expr) \\r
-       do \\r
-       { \\r
-               (expr);  \\r
-               caspar::gl::SMFL_GLCheckError(CASPAR_GL_EXPR_STR(expr), __FILE__, __LINE__);\\r
-       }while(0);\r
-//#else\r
-//#define GL(expr) expr\r
-//#endif\r
-\r
-}}
\ No newline at end of file
+///////////////////////////
+//
+// SFML - Simple and Fast Multimedia Library
+// Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)
+//
+// This software is provided 'as-is', without any express or implied warranty.
+// In no event will the authors be held liable for any damages arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it freely,
+// subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented;
+//    you must not claim that you wrote the original software.
+//    If you use this software in a product, an acknowledgment
+//    in the product documentation would be appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such,
+//    and must not be misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source distribution.
+//
+///////////////////////////
+
+#pragma once
+
+#include "../except.h"
+
+namespace caspar { namespace gl {
+
+struct ogl_exception                                                   : virtual caspar_exception{};
+struct ogl_invalid_enum                                                        : virtual ogl_exception{};
+struct ogl_invalid_value                                               : virtual ogl_exception{};
+struct ogl_invalid_operation                                   : virtual ogl_exception{};
+struct ogl_stack_overflow                                              : virtual ogl_exception{};
+struct ogl_stack_underflow                                             : virtual ogl_exception{};
+struct ogl_out_of_memory                                               : virtual ogl_exception{};
+struct ogl_invalid_framebuffer_operation_ext   : virtual ogl_exception{};
+
+void SMFL_GLCheckError(const std::string& expr, const char* func, const char* file, unsigned int line);
+
+//#ifdef _DEBUG
+
+#define CASPAR_GL_EXPR_STR(expr) #expr
+
+#define GL(expr) \
+       if(false){}else \
+       { \
+               (expr);  \
+               caspar::gl::SMFL_GLCheckError(CASPAR_GL_EXPR_STR(expr), __FUNCTION__, __FILE__, __LINE__);\
+       }
+
+// TODO: decltype version does not play well with gcc
+#define GL2(expr) \
+       [&]()\
+       {\
+               auto ret = (expr);\
+               caspar::gl::SMFL_GLCheckError(CASPAR_GL_EXPR_STR(expr), __FUNCTION__, __FILE__, __LINE__);\
+               return ret;\
+       }()
+/*#define GL2(expr) \
+       [&]() -> decltype(expr) \
+       { \
+               auto ret = (expr); \
+               caspar::gl::SMFL_GLCheckError(CASPAR_GL_EXPR_STR(expr), __FILE__, __LINE__); \
+               return ret; \
+       }()*/
+//#define GL2(expr) [&]() -> decltype(expr) { auto ret = (expr); caspar::gl::SMFL_GLCheckError(CASPAR_GL_EXPR_STR(expr), __FILE__, __LINE__); return ret; }()
+//#else
+//#define GL(expr) expr
+//#endif
+
+}}