Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Game Development and Automation @ Agile Sapporo...

Game Development and Automation @ Agile Sapporo 2018 #1

A thirty minute presentation I gave at Agile Sapporo 2018 #1 describing in detail how Cold Fusion uses buildbot for Continuous Integration for development, and fastlane to easily deploy updated binaries and metadata to iTunes Connect and Google Play for our flagship game, Crystal Clash. I also cover a few interesting issues related to GPU differences, and OS/tool bugs that I've run into while developing our mobile game engine on both iOS and Android.

(Note: This presentation is only in Japanese, sorry.)

Michael Tedder

February 28, 2018
Tweet

More Decks by Michael Tedder

Other Decks in Technology

Transcript

  1. ग़਎ɿΞϝϦΧʢϑϩϦμभΦʔϥϯυࢢʣ
 ࢓ࣄɿήʔϜ։ൃɺ%Τϯδϯ։ൃɺΦʔσΟΦ%41։ൃɺωοτϫʔΫ։ൃɺ$&0
 ݴޠɿ$ ɺ1)1ɺ5ZQF4DSJQUɺΞηϯϒϥʢYY"3..*14 
 झຯɿσϞγʔϯʢ5PLZP%FNP'FTUͷओ࠵ऀʣɺνοϓνϡʔϯɺ73ɺ"84ɺӉ஦
 
 ࡀͰߴߍଔۀɺ6OJWFSTJUZPG$FOUSBM'MPSJEBେֶʹೖֶ
 
 ೥ɹେֶΠϯλʔϯͰ73։ൃΛ࢝Ίͯɺʮ7JSUPQJBʯΛ4*((3"1)Ͱެ։


    ೥ɹ/JOUFOEPͷΤϛϡϨʔλΛ࡞੒ɺήʔϜۀքʹೖΔ
 ೥ɹ೔ຊʢ౦ژʣ΁Ҡಈ
 ೥ɹԭೄ΁Ҡಈ
 ೥ɹגࣜձࣾίʔϧυɾϑϡʔδϣϯΛઃཱ
 ೥ɹࡳຈ΁Ҡಈ
 ೥ɹ౦ژήʔϜγϣ΢ʹग़లɺࣗࣾΦϦδφϧͷεϚϗ޲͚ήʔϜ
 ɹɹɹɹɹɹɹɹʮΫϦελϧɾΫϥογϡʯ J04"OESPJE,JOEMF'JSF Λ഑৴ ςομʔɹϚΠέϧ ࡀ michael.tedder42 @_Falken Falken42 ࣗݾ঺հ
  2. $'ͰCVJMECPUͷࣄྫ ➤ CVJMECPUϚελʔ͸&$ͷUNJDSPʹઃஔ ➤ ࣾ಺ͷJ.BD ୆ ʹ7JSUVBM#PY7.Λͭ ➤ 8JOEPXT CVJMECPUϫʔΧʔ

     ➤ 6CVOUV CVJMECPUϫʔΧʔ  ➤ J.BDʹ΋CVJMECPUϫʔΧʔ ➤ 9DPEFͰNBD04J04Ϗϧυ͕ඞཁͷͨΊɺ J.BD͸͔ܽͤͳ͍ ➤ ࠓޙ͸7.Λ&$ΠϯελϯεʹҠಈ༧ఆ
  3. $'ͰCVJMECPUͷࣄྫ ➤ 8JOEPXTϓϥοτϑΥʔϜͷϏϧυεςοϓ ➤ HJUߋ৽HJUϋογϡΛιʔεʹ͚ͭΔ ➤ σόοά൛ΛίϯύΠϧ CJU  ➤

    σόοά൛ͷςετΛίϯύΠϧ CJU  ➤ σόοά൛ͷςετΛ࣮ߦ CJU  ➤ ϦϦʔε൛ΛίϯύΠϧ CJU  ➤ ϦϦʔε൛ͷςετΛίϯύΠϧ CJU  ➤ ϦϦʔε൛ͷςετΛ࣮ߦ CJU
  4. GBTUMBOFͷ঺հ ˞GBTUMBOFͷ)1ΑΓ ➤ ͭ·ΓɺΞϓϦެ։͢Δલʹςελʔʹ഑৴ ➤ J5VOFT$POOFDU͸5FTU'MJHIU ➤ (PPHMF1MBZ͸ΞϧϑΝϕʔλτϥοΫ͋Δ ➤ ΞϓϦͷεΫϦʔϯγϣοτΛࣗಈࡱӨ

    ➤ ෳ਺ݴޠରԠ ➤ ֤ΞϓϦετΞͷެ։"1*ར༻ͯ͠σϓϩΠ ➤ ϕʔλ൛Λςελʔ΁ ➤ ϦϦʔε൛Λެ։ετΞϖʔδ΁ ➤ ΞϓϦূ໌ॻͷࣗಈిࢠॺ໊෇͚
  5. ήʔϜεϚϗ։ൃͰͷۤ࿑ ᶄ"OESPJEͰNFNTFU ͷελοΫΦʔόʔϑϩʔ ➤ "OESPJEͷ৽͍͠04όʔδϣϯͰ͸OBUJWFίʔυͷෛ୲ΛݮΒͨ͢Ί04ଆͰ ৭ʑͱαϙʔτͯ͘͠ΕͯΔʢ͍͍͜ͱʣ ➤ @@BFBCJ@NFNTFU ͱ͍͏৽͍ؔ͠਺͸"1*͔ΒରԠ ➤

    ී௨ͷMJCDͷNFNTFU ؔ਺͸௚઀@@BFBCJ@NFNTFU ΛݺͿ ➤ "1*ΑΓલͷ୺຤Ͱ͸౰વଘࡏ͠ͳ͍ʢ࣮ߦ࣌EZOBNJDϦϯΫΤϥʔൃੜʣ ➤ "1*ΑΓલͷ୺຤ΛରԠ͢Δʹ͸ɾɾɾ
  6. ήʔϜεϚϗ։ൃͰͷۤ࿑ ᶄ"OESPJEͰNFNTFU ͷελοΫΦʔόʔϑϩʔ void __aeabi_memset(void *dest, size_t n, int c)

    __attribute__ ((weak)) { u8 *pdst = static_cast<u8 *>(dest); while (n--) *pdst++ = c; } ➤ "1*ΑΓલͷ୺຤ΛରԠ͢Δʹ͸XFBLؔ਺Λ༻ҙ͠ɺॳظςετͷͨΊʹγϯϓϧͳϧʔϓͰରԠ
  7. ήʔϜεϚϗ։ൃͰͷۤ࿑ ᶄ"OESPJEͰNFNTFU ͷελοΫΦʔόʔϑϩʔ ➤ "1*ΑΓલͷ୺຤ΛରԠ͢Δʹ͸XFBLؔ਺Λ༻ҙ͠ɺॳظςετͷͨΊʹγϯϓϧͳϧʔϓͰରԠ void __aeabi_memset(void *dest, size_t n,

    int c) __attribute__ ((weak)) { u8 *pdst = static_cast<u8 *>(dest); while (n--) *pdst++ = c; } ➤ σόοά൛Ͱਖ਼ৗʹಈ͍͚ͨͲɺϦϦʔε൛ͰଈΫϥογϡɾɾɾ
  8. ήʔϜεϚϗ։ൃͰͷۤ࿑ ᶄ"OESPJEͰNFNTFU ͷελοΫΦʔόʔϑϩʔ ➤ DMBOHͷ࠷దԽ͕ϧʔϓ͸NFNTFU ͱಉ͡ίʔυͱ൑அ͠ɺ࣮ࡍNFNTFU ʹஔ͖׵͑ΒΕͨ void __aeabi_memset(void *dest,

    size_t n, int c) __attribute__ ((weak)) { u8 *pdst = static_cast<u8 *>(dest); while (n--) *pdst++ = c; memset(dest, n, c); // clang࠷దԽɹ }
  9. ήʔϜεϚϗ։ൃͰͷۤ࿑ ᶄ"OESPJEͰNFNTFU ͷελοΫΦʔόʔϑϩʔ ➤ DMBOHͷ࠷దԽ͕ϧʔϓ͸NFNTFU ͱಉ͡ίʔυͱ൑அ͠ɺ࣮ࡍNFNTFU ʹஔ͖׵͑ΒΕͨ void __aeabi_memset(void *dest,

    size_t n, int c) __attribute__ ((weak)) { u8 *pdst = static_cast<u8 *>(dest); while (n--) *pdst++ = c; memset(dest, n, c); // clang࠷దԽɹ } ➤ NFNTFU ˠ@@BFBCJ@NFNTFU ˠNFNTFU ˠɾɾɾˠελοΫΦʔόʔϑϩʔʂ
  10. ήʔϜεϚϗ։ൃͰͷۤ࿑ out vec4 outputColor; in vec2 uv; uniform sampler2D tex0;

    uniform sampler2D tex1; uniform vec3 lightboxData; void main() { if (uv.x < lightboxData.x) { if (lightboxData.y > 0.0) { vec2 tuv = vec2(uv.x + (1.0 - lightboxData.x), uv.y); outputColor = texture(tex0, tuv); } else { outputColor = vec4(0.0, 0.0, 0.0, 0.0); } } else { if (lightboxData.z > 0.0) { vec2 tuv = vec2(uv.x - lightboxData.x, uv.y); outputColor = texture(tex1, tuv); } else { outputColor = vec4(0.0, 0.0, 0.0, 0.0); } } }
  11. ήʔϜεϚϗ։ൃͰͷۤ࿑ out vec4 outputColor; in vec2 uv; uniform sampler2D tex0;

    uniform sampler2D tex1; uniform vec3 lightboxData; void main() { if (uv.x < lightboxData.x) { if (lightboxData.y > 0.0) { vec2 tuv = vec2(uv.x + (1.0 - lightboxData.x), uv.y); outputColor = texture(tex0, tuv); } else { outputColor = vec4(0.0, 0.0, 0.0, 0.0); } } else { if (lightboxData.z > 0.0) { vec2 tuv = vec2(uv.x - lightboxData.x, uv.y); // tuv is already defined outputColor = texture(tex1, tuv); } else { outputColor = vec4(0.0, 0.0, 0.0, 0.0); } } }