2012-02-28 49 views

回答

1

我第一次結束了使用我的自定義#include預處理

製造假包裝着色器(很簡單的做!):

test.vert

#include test.vs 

test.frag

#include test.fs 

這是一個半可怕的h ack,絕對是你不想包含在svn/git中的任何東西,不管你是否共享代碼,但是當你需要扭轉時,很好。

隨着越來越多的人結束了使用幾個不同的文件擴展名,我結束了添加更多的方式來加載着色器。

LoadShader("MyShader", <List of preprocessors>) 
LoadShader("vertex shader", "fragment shader", ... , <List of preprocessors>) 

(這裏簡化什麼是真正的傳遞是一個結構)

第一個函數將做到以下幾點:

  • 文本文件[".vert",".vs".. etc]用於頂點着色
  • 文本用於片段着色器的[".frag",".fs".. etc]的文件
  • 等等。

用戶可以定義他們想要支持的文件擴展名。

第二個函數只是使用確切的文件名。在第一個功能中,可能的組合受到預處理器的限制。在第二個選項中,您可以組合任何您需要的着色器文件,並且還可以使用預處理器進行變化。

這當然簡化了,但顯示了一般的想法。