আপনি যা জিজ্ঞাসা করছেন তা ওপেনজিএল 3.2 এ সম্ভব। আমি আমার এফবিওকে একটি রঙের টেক্সচারে ছড়িয়ে রঙের ছিটকে পেয়েছি, অন্য রঙের টেক্সচারের জন্য নরমাল এবং গভীরতার টেক্সচারে গভীরতা - কোনও রেন্ডারবুফার দরকার নেই। প্রকৃতপক্ষে রেন্ডারবুফারগুলি কেবল একটি সমস্যা, কারণ আপনি সেগুলি থেকে নমুনা নিতে পারবেন না, তাই আপনাকে glReadPixels(...)
জিপিইউ মেমরির সমস্ত কিছু বজায় রাখার পরিবর্তে আরবিওর বাইরে এবং সিপিইউতে একটি টেক্সট ব্যবহার করতে হবে বা অন্যভাবে কোনওভাবে অনুলিপি করতে হবে। তাই ...
আপনি যদি সত্যিই চান, আপনি নিজের এফবিওতে পৃথক রঙের টেক্সচার সংযুক্তিতে গভীরতার মতো ম্যানুয়ালি আউটপুট স্টাফগুলিতে আপনার প্রথম পাসের শেডারে কোড লিখতে পারেন। যে দ্বারা ব্যবহারের জন্য হবে আপনি আপনার পোস্ট-পাস শেডার হবে। ওপেনজিএল এর অভ্যন্তরীণ গভীরতা-পরীক্ষায় ব্যবহারের জন্য , আপনাকে অতিরিক্তভাবে কোনও আরবিও বা টেক্সচার সেটটি আপনার এফবিওর জিএল_ডিপিএইচটিএটিএটিচএএমটি হিসাবে প্রয়োজন হবে। তবে আপনি উভয়ই পরিবেশন করতে একটি একক টেক্সচার সেট আপ করতে পারেন - এটি আরও দক্ষ এবং ব্যবহারে সহজ।
আমার গভীরতার টেক্সচার সেটআপ কোডটি দেখতে দেখতে (জাভা, কেবল বাইটবফার স্টাফটিকে উপেক্ষা করুন ... এবং নোট করুন যে আমি "আইডি" ব্যবহার করি পূর্ণসংখ্যার হ্যান্ডলগুলি / পয়েন্টারগুলিকে উল্লেখ করার জন্য, যেহেতু সেই ধারণাটি জাভাতে ভালভাবে বসে না):
gBufferDepthTexture = new Texture();
gBufferDepthTexture.id = glGenTextures();
gBufferDepthTexture.unit = 2;
gBufferDepthTexture.width = Display.getWidth();
gBufferDepthTexture.height = Display.getHeight();
gBufferDepthTexture.bytes = ByteBuffer.allocateDirect(Display.getWidth()*Display.getHeight() * 4);
glActiveTexture(gBufferDepthTexture.unit + GL_TEXTURE0); //eg. 0 + 33984 = GL_TEXTURE0, while 31 + 33984 = GL_TEXTURE31.
glBindTexture(GL_TEXTURE_2D, gBufferDepthTexture.id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, gBufferDepthTexture.width, gBufferDepthTexture.height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, gBufferDepthTexture.bytes);
//...GL_UNSIGNED_INT or GL_UNSIGNED_BYTE may work better for you, instead... YMMV.
//glPixelStorei(GL_PACK_ALIGNMENT, 4);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
এবং পরে:
glBindFrameBuffer(GL_DRAW_FRAMEBUFFER, fbo.id);
//your existing glFramebufferTexture2D(...) calls here
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, gBufferDepthTexture.id, 0);
আপনি এখন gBufferDepthTexture
আপনার দ্বিতীয়, তৃতীয় পাস খণ্ড শেডারে ইউনিফর্ম হিসাবে (বা আপনার কী আছে) পাস করতে পারেন । আমি মনে করি আমরা নিরাপদে ধরে নিতে পারি যে আপনি স্টেনসিল বাফার দিয়ে ঠিক একই জিনিসটি করতে পারেন।