2011-05-24 13 views
14

मैं काहिरा (http://cairographics.org) का उपयोग कर रहा एक ओपन आधारित 3 डी ग्राफिक्स पुस्तकालय के साथ करने के लिए सीधे काहिरा सतह को प्रस्तुत करें।
मैं वर्तमान में विंडोज़ पर 3 डी लाइब्रेरी का उपयोग कर रहा हूं, लेकिन मुझे उम्मीद है कि मंच उत्तरदायी है। यह सब सी ++ में किया जाता है।संयोजन में ओपन बनावट

मैं सीधे आगे दृष्टिकोण काम कर रहे एक ओपन बनावट पाने के लिए glTexImage2D के साथ संयोजन में cairo_image_surface_create उपयोग करने के लिए है जो मिल गया है।

हालांकि, मैं क्या प्रलेखन cairo_image_surface_create से इकट्ठा कर लिया है एक सीपीयू आधारित रेंडरर का उपयोग करता है और मुख्य स्मृति में उत्पादन लिखते से।

मुझे समझ में आया है कि कैरो के पास एक नया ओपनजीएल आधारित रेंडरर है जो सीधे अपने GPU पर आउटपुट प्रस्तुत करता है, लेकिन मैं इसका उपयोग करने के तरीके पर ठोस विवरण नहीं ढूंढ पा रहा हूं।
(मुझे ग्लिट्ज-रेंडरर पर कुछ विवरण मिले हैं, लेकिन ऐसा लगता है कि इसे हटा दिया गया है और हटा दिया गया है)।

मैं कम से सतह सूची देख लिया है: http://www.cairographics.org/manual/cairo-surfaces.html, लेकिन मुझे लगता है मैं स्पष्ट याद कर रहा हूँ महसूस करते हैं।

मेरा प्रश्न है: मैं एक काहिरा सतह है कि एक ओपन बनावट के लिए सीधे renders कैसे बनाऊं?
ध्यान दें: स्क्रीन पर कैरो आउटपुट प्रदर्शित करने के लिए मुझे सीधे बनावट (प्रतिलिपि के बिना) बनावट करने में सक्षम होना चाहिए।

उत्तर

1

ग्लिट्ज रेंडरर को प्रयोगात्मक कैरो-ग्ला बैकएंड द्वारा प्रतिस्थापित किया गया है। http://cairographics.org/OpenGL/

अगर यह काफी स्थिर हालांकि प्रयोग की जाने वाली है नहीं कह सकते हैं:

आप में यह का उल्लेख मिल जाएगा।

एक बार जब आप एक ग्लो बैकएंड काम कर रहे हों, तो आप किसी दिए गए बनावट में सीधे प्रस्तुत करने के लिए फ़्रेमबफर ऑब्जेक्ट में प्रस्तुत कर सकते हैं।

+1

मुझे पता है कि ग्लिट्ज रेंडरर को प्रतिस्थापित कर दिया गया है, मैंने मूल प्रश्न में इसका उल्लेख किया है। लेकिन वह पृष्ठ वास्तव में कैरो-ग्ल बैकएंड का उपयोग करने के तरीके के बारे में कोई निर्देश नहीं दिखाता है, मैं विशेष रूप से पूछता हूं कि ** glTexImage2D ** का उपयोग किये बिना सीधे ओपनजीएल बनावट को कैसे प्रस्तुत करना है। क्या आपके पास अधिक सटीक निर्देश हैं? – Remco

+0

@Vhab - क्षमा करें मुझे नहीं पता कि कैरो-ग्ल का उपयोग कैसे करें। लेकिन इसके बिना, मुझे विश्वास था कि आप glTexImage (या समकक्ष) का उपयोग करने के कारण हैं। कैरो-ग्ल के साथ, आप एक फ्रेमबफर ऑब्जेक्ट को बांध सकते हैं ताकि कैरो ड्रॉ के रीडायरेक्शन को बनावट में कॉल किया जा सके। मैं शायद अधिक विशिष्ट हो सकता हूं, क्षमा करें – rotoglup

+2

मैं कैरो-ग्ल का उपयोग करने के बारे में ठोस जानकारी नहीं ढूंढ पा रहा हूं, जो मुझे स्टैक ओवरफ्लो पर सवाल पूछने के लिए प्रेरित करता है। मैं खुशी से किसी भी उत्तर को स्वीकार करूंगा जो मुझे दिखाता है कि वास्तव में कैरो-ग्लो का उपयोग कैसे करें और कैरो आउटपुट के साथ एक वैध ओपनजीएल बनावट प्राप्त करें। – Remco

1

मैंने इसे GL_BGRA का उपयोग करके किया था। जब आप बनावट बनाने

int tex_w = cairo_image_surface_get_width(surface); 
int tex_h = cairo_image_surface_get_height(surface); 
unsigned char* data = cairo_image_surface_get_data(surface); 

तो

glTexImage2D(GL_TEXTURE_2D, 0, 4, tex_w,tex_h, 0,GL_BGRA, GL_UNSIGNED_BYTE, data); 

है। छवि सामग्री में परिवर्तन होने पर वें बनावट को अद्यतन करने के लिए glTexSubImage2D (...) का उपयोग करें। गति के लिए

+5

दुर्भाग्यवश, यदि आप मेरे प्रश्न को पढ़ चुके होंगे तो वही है जो मैं नहीं पूछ रहा हूं। – Remco

1

2015 की स्थिति के अनुसार GL_NEAREST को बनावट लिए फ़िल्टर सेट, काहिरा जीएल SDL2 शायद सबसे अच्छा तरीका काहिरा जीएल

https://github.com/cubicool/cairo-gl-sdl2

उपयोग करने के लिए आप उबंटू जहां काहिरा की तरह एक ओएस पर हैं, तो है जीएल के साथ संकलित नहीं है आपको अपनी प्रतिलिपि संकलित करने की आवश्यकता होगी और कैरो-ग्ल-एसडीएल 2 को यह पता चलेगा कि यह कहां है।

संबंधित मुद्दे