平台相關函式的隔離
以為通過eglview類隔離平台相關性,已經可以了,結果發現gl在三個平台居然定義也有差別。比如gl_bgr,android居然沒有。好吧,我們的渲染類renderer裡面要根據三個不同的平台選擇編譯**。腫麼破?
考慮了下,決定用巨集隔開好了。在編譯之前,還有乙個預處理階段。來看**。
//
//#pragma once
#define platform_unknown 0
#define platform_ios 1
#define platform_android 2
#define platform_win32 3
// determine target platform by compile environment macro.
#define target_platform platform_unknown
// iphone
#if defined(target_os_iphone)
#undef target_platform
#define target_platform platform_ios
#endif
// android
#if defined(android)
#undef target_platform
#define target_platform platform_android
#endif
// win32
#if defined(win32) && defined(_windows)
#undef target_platform
#define target_platform platform_win32
#endif
這樣不同的平台,target_platform的值會不一樣。
再來看gl標頭檔案的引用
//
//#pragma once
#include "platformconfig.h"
#if (target_platform == platform_win32)
#include "glew.h"
#endif
#if (target_platform == platform_android)
#define glcleardepth glcleardepthf
#define gldeletevertexarrays gldeletevertexarraysoes
#define glgenvertexarrays glgenvertexarraysoes
#define glbindvertexarray glbindvertexarrayoes
#define glmapbuffer glmapbufferoes
#define glunmapbuffer glunmapbufferoes
#define gl_depth24_stencil8 gl_depth24_stencil8_oes
#define gl_write_only gl_write_only_oes
// gl_glext_prototypes isn't defined in glplatform.h on android ndk r7
// we manually define it here
#include #ifndef gl_glext_prototypes
#define gl_glext_prototypes 1
#endif
// normal process
#include #include // gl2.h doesn't define glchar on android
typedef char glchar;
// android defines gl_bgra_ext but not gl_brga
#ifndef gl_bgra
#define gl_bgra 0x80e1
#endif
#ifndef gl_bgr
#define gl_bgr 0x80e0
#endif
//declare here while define in eglview_android.cpp
extern pfnglgenvertexarraysoesproc glgenvertexarraysoe***t;
extern pfnglbindvertexarrayoesproc glbindvertexarrayoe***t;
extern pfngldeletevertexarraysoesproc gldeletevertexarraysoe***t;
#define glgenvertexarraysoes glgenvertexarraysoe***t
#define glbindvertexarrayoes glbindvertexarrayoe***t
#define gldeletevertexarraysoes gldeletevertexarraysoe***t
#endif
好了,搞定。
跨平台相關
二者區別 strdup是posix,strdup是windows特定。在unix上,使用的strdup。在不同作業系統的lib庫名字不同的,為了讓程式可以多平台,需要在巨集定義中判斷當前執行作業系統和編譯器的型別,動態調整。windows win32 win32 linux linux linux ...
CTF相關的學習平台
ctf比賽主要表現以下幾個技能上 逆向工程 密碼學 acm程式設計 web漏洞 二進位制練習 網路和取證。可以從中選擇並關注乙個你已經上手的技能方向。web pwn re mobile crypto 1 4 相關 及論壇 1 實驗吧 自己有賬號 2 看雪學院 3 ctf社群 4 知乎帖 針對ctf,...
廣告相關行業平台
2 廣告網路 乙個封閉的網路廣告市場,網路業主作為中間環節先向出版商採購廣告庫存,然後再轉售給買家,雖然有時候出版商也可以建立自己的廣告網路。3 方平台 ssp 方平台能夠讓出版商也介入廣告交易,從而使它們的庫存廣告可用。通過這一平台,出版商希望他們的庫存廣告可以獲得最高的有效每千次展示費用,而不必...