平台相關函式的隔離

2021-06-26 09:35:16 字數 2702 閱讀 3659

平台相關函式的隔離

以為通過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 方平台能夠讓出版商也介入廣告交易,從而使它們的庫存廣告可用。通過這一平台,出版商希望他們的庫存廣告可以獲得最高的有效每千次展示費用,而不必...