OpenGL: Cocoa eller Carbon?

Tråden skapades och har fått 14 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2008-04-28 10:08

jag har nyligen fått min MBP och det är dags att lära sig utveckla för platformen.

Har erfarenhet utav programmering, men bara lite grunder när det kommer till OpenGL.

Min plan var först att lära mig objective-c för jag aldrig har rört det. Men sen såg jag denna bild, och fick för mig att det är för stor skillnad i prestanda.

http://developer.apple.com/documentation/GraphicsImaging/Conceptual/OpenGL-MacProgGuide/art/cocoa_carbon_rendering.jpg

Vill bara veta hur stor skillnaden är, och vad jag borde satsa på att läramig Cocoa eller Carbon?

  • Medlem
  • Stockholm
  • 2008-04-28 10:16

Vet inget om programmering men jag vet att Carbon är på väg ut med stormsteg.

  • Medlem
  • Umeå
  • 2008-04-28 10:19

cocoa - carbon är ett legacy lager från macos 9 tiden. Cocoa is the way of the future!!

Utöver tidigare kommentarer kan jag tillägga att Carbon inte kommer att släppas med 64-bitarsstöd. Inte för att det direkt gör Carbon totalt värdelöst men varför låsa in sig när man kan utveckla för framtiden på en gång.

  • Medlem
  • Stockholm
  • 2008-04-28 13:09

Dessutom får man väl mer gratis om man utvecklar i Cocoa?

I princip all nyutveckling sker ju i Cocoa. Vill man komma igång enkelt och kunna tillgodogöra sig all den info som Apple sprider är det Cocoa som gäller.

  • Medlem
  • Stockholm
  • 2008-04-28 15:01

Med QuickTime kan man välja att programmera på olika nivåer. Det finns QTKit där man kan nå en hel del av QuickTimes funktioner genom ett Cocoa-API. Samtidigt finns de gamla lågnivåanropen kvar. Jag antar att de flesta med mig, väljer högnivåalternativet om de kan (om de inte heter Steve Gibson, och bara programmerar i assembler).

Objectiv-C 2.0 är ett minimalt superset of C, vilket innebär att all C-kod är giltig kod, och du kan således välja att programmera på lägre nivå där du hittar prestandagrisar.

Har inte programmerat för OpenGL men som jag förstår det har du tillgång till CGL, vilket är lågnivå-API:et från såväl Cocoa- som Carbonprogram. Sedan har du på högre nivå, några klasser i Cocoa och ett gäng structs för Carbon.

Om du tittar på hur koden ser ut på i Carbon och på lägre nivå känns det ofta underbart att använda ett Cocoa-API.

Vänligen, Ylan

www.ylan.nu

  • Medlem
  • Stockholm
  • 2008-04-28 15:13

Hittade för övrigt texten till din bild.

Citat:

Without a windowing system, the 3D graphics of an OpenGL program are trapped inside the GPU. Figure 2-1 shows a cube drawn to a Cocoa view and a trefoil drawn to a Carbon window. (You can just as easily draw the trefoil to the Cocoa view and the cube to the Carbon window.)

(Min fetning)

Vänligen, Ylan

www.ylan.nu

Cocoa är långsamt, har hemsk syntax och fokuserat på ett udda språk. Carbon är snabbt och funkar med alla språk, men det är inte NeXT-gängets grej. Apple har alltid varit tydliga med att Carbon är "prime citizen" och inget temporärt - tills de plötsligt skippade GUI-delarna i 64-bitars Carbon. Så de ljög helt enkelt? Kul. Tydligen känner sig Apple så starka att de kan skita i vad MS och Adobe behöver.

Men det är faktiskt irrelevant. När det gäller OpenGL så är varken Cocoa eller Carbon rätt väg att gå. Varför tjafsa med plattformsberoende API:er? SDL är nog det starkaste korsplattforms-API:et. Gamla GLUT är inte illa det heller, mycket bättre än sitt rykte. Med tanke på hur Apple behandlar sina utvecklare så är det dumt att satsa på deras APIer och bättre att satsa på portabel kod.

Ursprungligen av Ingemar Ragnemalm:

Apple har alltid varit tydliga med att Carbon är "prime citizen" och inget temporärt - tills de plötsligt skippade GUI-delarna i 64-bitars Carbon. Så de ljög helt enkelt? Kul.

Jag kan inte riktigt hålla med dig om det. Vi har alla sett de där bilderna av OS Xs arkitektur med Darwin längst ner och API:erna högst upp. Classic, Carbon och Cocoa i den ordningen. Från Apple var man väldigt tydlig med att tanken var att programmen skulle vandra från vänster (Classic) till höger (Cocoa). Det sa man uttryckligen flera gånger redan kring '99/2000. Carbon var ett mellanting så att man kunde hoppa på X utan att behöva skriva om programmen alltför mycket, men att man så småningom skulle gå över till Cocoa.

  • Medlem
  • Stockholm
  • 2008-04-29 00:22
Ursprungligen av Marcus K:

Jag kan inte riktigt hålla med dig om det. Vi har alla sett de där bilderna av OS Xs arkitektur med Darwin längst ner och API:erna högst upp. Classic, Carbon och Cocoa i den ordningen. Från Apple var man väldigt tydlig med att tanken var att programmen skulle vandra från vänster (Classic) till höger (Cocoa). Det sa man uttryckligen flera gånger redan kring '99/2000. Carbon var ett mellanting så att man kunde hoppa på X utan att behöva skriva om programmen alltför mycket, men att man så småningom skulle gå över till Cocoa.

Ja det vet till och med jag som inte är programmerare. Det är väl just för Adobe och Microsofts skull som det funnits kvar så länge.

  • Medlem
  • Stockholm
  • 2008-04-29 00:31

> Ingemar. Om du skulle få bestämma lite på Apple när det gäller utveckling osv. Vad skulle du göra och ändra på? Inte för tekniskt nu utan mer i stora drag.
Du verkar ju ha svårt för det mesta som Apple producerar nu så jag är nyfiken. Alltså ingen Mac OS 9-bashing.

(Knepigt ämne. Det är väldigt komplext.)

Det är helt och hållet en fråga om vems ärenden man går. Apple gör inte fel. Vilket API som är bäst är irrelevant. Program skrivna i Carbon (och i ännu högre grad gamla Toolboxen) är relativt lättportade till Win32. Det är inte bra, det gör att programmen glider över till PC, vilket en massa klassiker gjort (som Illustrator och Photoshop). Cocoa låser in utvecklarna på Macen, det är så vitt jag kan se betydligt svårare att porta. (Allt går förstås.)

Så Apple gör så rätt så. Fler program enbart till Apples plattformar, det är precis vad Apple behöver. Det genererar försäljning, det håller kvar folk. Perfekt.

Men det är inte speciellt bra för mig. Bland mina projekt finns ett stort paket för att utveckla program på Mac och Win32 samtidigt. Det utgör en investering i Carbon på åtskilliga manår. Vad man än gör blir det dyrt.

Det är inte enbart dåligt så klart. Alla gamla program som försvinner lämnar plats för nyutveckling av ersättare, det skapar turbulens och nya lösningar. Den biten är så klart en möjlighet, man kan slå sig in. (Men det gör också ont när viktiga verktyg försvinner.)

Skulle jag "bestämma lite på Apple", anställd en bit upp, ja, då blir prioriteringarna helt förändrade. Då är rätt sak att göra att rulla in nästa grej, någonting jag kan motivera är bättre än Cocoa. Det skulle stärka min position (mycket viktigt i sammanhanget!), gynna Apple på samma gång (eller i alla fall så skall styrelsen tro det), och få en massa veteranutvecklare att slita sitt hår - igen. Det handlar inte om teknik utan om pengar och makt. Skrämmande bild, eller hur?

Tråden handar om OpenGL så låg mig sluta "hemma": Kör man OpenGL så är det inte speciellt viktigt vad man har under, faktiskt. Man fixar det med någon enstaka fil med specialkod, det är bara en trivial startsträcka. I min erfarenhet ger de där plattformsspecifika API:erna aningen mer kontroll men mer strul. Alternativet är SDL eller GLUT. Men 99.9% av programmet är OpenGL (och lager ovanpå det) och kod rakt ner på Unix. Det är trevligt! Bland bekymmer och krångel är OpenGL en tydlig ljuspunkt. (Trevligt att sluta positivt!)

  • Medlem
  • Uppsala
  • 2008-05-02 15:15

Jag instämmer med Ingemar om att för OpenGL spelar det inte så stor roll om man kör Carbon eller Cocoa. En fördel för en nybörjare enligt mig kan vara att om man använder Cocoa så man även tillgång till NS* objekten för enklare hantering av bilder som är något man gärna vill använda i ett OpenGL program.

Samtidigt så kan man använda SDL, SDL_image för enkelt bildhantering och komma igång relativt snabbt med OpenGL och har man lite vana av C så kommer man igång fort.
Syftet med programmet tycker jag ska styra ramverken man använder.

Ska man lära sig grafikprogrammering först och främst ska man nog satsa på GLUT eller SDL eftersom då får man inte så mycket OS X specifikt "ivägen". Prestandan är inte lika viktigt när man är nybörjare och ska lära sig teorierna och teknikerna. Dock utifrån vad jag läst och vet om OpenGL så kör dom "stora" pojkarna med CGL för att initiera OpenGL, som är mycket lågnivå och egentligen inte direkt knutet till varken Cocoa eller Carbon.

Bildhantering för OpenGL är mest en fråga om libjpeg och liknande, eller QuickTime (som dock är mindre portabelt). Det är lätt. Betydligt knepigare är typsnittshantering.

1
Bevaka tråden