         # If it tries to load the same data as @promised_data,
         # it won't load it again but instead return the existing promise
         @promised_data = null
+        @promised_ratio = null
         @users = [] # materials
         # These hold the data for the current texture, and they
         # change after another texture is loaded

        if @gl_tex?
            @context.render_manager.gl.deleteTexture @gl_tex
        @image?.src = @video?.src = ''
        @gl_tex = null
        @loaded = false
        @texture_type = ''

    load: (options={}) ->
        {gl, extensions} = @context.render_manager
        {
            size_ratio
            force=false
        } = options
        if force then @promised_data = @promised_ratio = null
        # TODO: If there's a pending promise, it should be rejected or
        # delegated if possible
        @promised_ratio = size_ratio = size_ratio or @promised_ratio or 1

        base = @scene.data_dir + '/textures/'
        {raw_pixels, jpeg, png, rgb565, dds, etc1, etc2,
